From d36e4c43d10d8362c47b5745244cdaa5a06143ae Mon Sep 17 00:00:00 2001 From: Karl-Hermann Wieners <karl-hermann.wieners@mpimet.mpg.de> Date: Mon, 9 Jul 2018 14:50:48 +0000 Subject: [PATCH] mkexp: set version info to 1.0.1 for next release --- doc/mkexp.fodt | 399 ++++++++++++++++++++++++------------------------ doc/mkexp.pdf | Bin 445188 -> 445245 bytes package_info.py | 2 +- 3 files changed, 199 insertions(+), 202 deletions(-) diff --git a/doc/mkexp.fodt b/doc/mkexp.fodt index 2b9a0a9..9691651 100644 --- a/doc/mkexp.fodt +++ b/doc/mkexp.fodt @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> <office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text"> - <office:meta><meta:creation-date>2015-01-05T17:44:27.618344249</meta:creation-date><dc:title>Make Experiments!</dc:title><meta:editing-duration>P12DT2H9M42S</meta:editing-duration><meta:editing-cycles>137</meta:editing-cycles><meta:generator>LibreOffice/5.1.6.2$Linux_X86_64 LibreOffice_project/10m0$Build-2</meta:generator><meta:initial-creator>Karl-Hermann Wieners</meta:initial-creator><dc:date>2018-07-09T11:39:01.476964727</dc:date><dc:creator>Karl-Hermann Wieners</dc:creator><meta:printed-by>Karl-Hermann Wieners</meta:printed-by><meta:print-date>2015-01-20T10:55:48.576690105</meta:print-date><dc:subject>Run-script generation for earth system models</dc:subject><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="28" meta:paragraph-count="563" meta:word-count="7691" meta:character-count="49000" meta:non-whitespace-character-count="41476"/><meta:template xlink:type="simple" xlink:actuate="onRequest" xlink:title="A4" xlink:href="../../../../../../home/m221078/.config/libreoffice/4/user/template/A4.ott" meta:date="2015-01-05T17:44:27.463210655"/></office:meta> + <office:meta><meta:creation-date>2015-01-05T17:44:27.618344249</meta:creation-date><dc:title>Make Experiments!</dc:title><meta:editing-duration>P12DT2H9M53S</meta:editing-duration><meta:editing-cycles>138</meta:editing-cycles><meta:generator>LibreOffice/5.1.6.2$Linux_X86_64 LibreOffice_project/10m0$Build-2</meta:generator><meta:initial-creator>Karl-Hermann Wieners</meta:initial-creator><dc:date>2018-07-09T16:49:36.223974038</dc:date><dc:creator>Karl-Hermann Wieners</dc:creator><meta:printed-by>Karl-Hermann Wieners</meta:printed-by><meta:print-date>2015-01-20T10:55:48.576690105</meta:print-date><dc:subject>Run-script generation for earth system models</dc:subject><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="28" meta:paragraph-count="563" meta:word-count="7691" meta:character-count="48997" meta:non-whitespace-character-count="41473"/><meta:template xlink:type="simple" xlink:actuate="onRequest" xlink:title="A4" xlink:href="../../../../../../home/m221078/.config/libreoffice/4/user/template/A4.ott" meta:date="2015-01-05T17:44:27.463210655"/></office:meta> <office:settings> <config:config-item-set config:name="ooo:view-settings"> - <config:config-item config:name="ViewAreaTop" config:type="long">214353</config:config-item> + <config:config-item config:name="ViewAreaTop" config:type="long">9200</config:config-item> <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item> <config:config-item config:name="ViewAreaWidth" config:type="long">22311</config:config-item> <config:config-item config:name="ViewAreaHeight" config:type="long">17337</config:config-item> @@ -13,12 +13,12 @@ <config:config-item-map-indexed config:name="Views"> <config:config-item-map-entry> <config:config-item config:name="ViewId" config:type="string">view2</config:config-item> - <config:config-item config:name="ViewLeft" config:type="long">9190</config:config-item> - <config:config-item config:name="ViewTop" config:type="long">222545</config:config-item> + <config:config-item config:name="ViewLeft" config:type="long">13079</config:config-item> + <config:config-item config:name="ViewTop" config:type="long">15314</config:config-item> <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item> - <config:config-item config:name="VisibleTop" config:type="long">214353</config:config-item> + <config:config-item config:name="VisibleTop" config:type="long">9200</config:config-item> <config:config-item config:name="VisibleRight" config:type="long">22310</config:config-item> - <config:config-item config:name="VisibleBottom" config:type="long">231689</config:config-item> + <config:config-item config:name="VisibleBottom" config:type="long">26536</config:config-item> <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> <config:config-item config:name="ViewLayoutColumns" config:type="short">0</config:config-item> <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item> @@ -68,7 +68,7 @@ <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item> <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item> <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item> - <config:config-item config:name="Rsid" config:type="int">15776616</config:config-item> + <config:config-item config:name="Rsid" config:type="int">15829022</config:config-item> <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item> <config:config-item config:name="PrintEmptyPages" config:type="boolean">false</config:config-item> <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item> @@ -108,7 +108,7 @@ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item> <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item> <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/> - <config:config-item config:name="PrinterSetup" config:type="base64Binary">qwH+/09mZmljZWpldC00NjIwLXNlcmllcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ1VQUzpPZmZpY2VqZXQtNDYyMC1zZXJpZXMAAAAAAAAWAAMAzQAAAAAAAAAIAFZUAAAkbQAASm9iRGF0YSAxCnByaW50ZXI9T2ZmaWNlamV0LTQ2MjAtc2VyaWVzCm9yaWVudGF0aW9uPVBvcnRyYWl0CmNvcGllcz0xCmNvbGxhdGU9ZmFsc2UKbWFyZ2luZGFqdXN0bWVudD0wLDAsMCwwCmNvbG9yZGVwdGg9MjQKcHNsZXZlbD0wCnBkZmRldmljZT0xCmNvbG9yZGV2aWNlPTAKUFBEQ29udGV4RGF0YQpJbnB1dFNsb3Q6QXV0bwBQYWdlU2l6ZTpMZXR0ZXIAABIAQ09NUEFUX0RVUExFWF9NT0RFDgBEVVBMRVhfVU5LTk9XTg==</config:config-item> + <config:config-item config:name="PrinterSetup" config:type="base64Binary">qwH+/09mZmljZWpldC00NjIwLXNlcmllcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ1VQUzpPZmZpY2VqZXQtNDYyMC1zZXJpZXMAAAAAAAAWAAMAzQAAAAAAAAAIAFZUAAAkbQAASm9iRGF0YSAxCnByaW50ZXI9T2ZmaWNlamV0LTQ2MjAtc2VyaWVzCm9yaWVudGF0aW9uPVBvcnRyYWl0CmNvcGllcz0xCmNvbGxhdGU9ZmFsc2UKbWFyZ2luZGFqdXN0bWVudD0wLDAsMCwwCmNvbG9yZGVwdGg9MjQKcHNsZXZlbD0wCnBkZmRldmljZT0xCmNvbG9yZGV2aWNlPTAKUFBEQ29udGV4RGF0YQpQYWdlU2l6ZTpMZXR0ZXIASW5wdXRTbG90OkF1dG8AABIAQ09NUEFUX0RVUExFWF9NT0RFDgBEVVBMRVhfVU5LTk9XTg==</config:config-item> <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item> </config:config-item-set> </office:settings> @@ -1045,187 +1045,186 @@ <style:style style:name="P221" style:family="paragraph" style:parent-style-name="List_20_Contents"> <style:text-properties officeooo:paragraph-rsid="00f02006"/> </style:style> - <style:style style:name="P222" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> - <style:text-properties officeooo:paragraph-rsid="007a1e4b"/> + <style:style style:name="P222" style:family="paragraph" style:parent-style-name="List_20_Contents"> + <style:text-properties officeooo:rsid="00f0bb68" officeooo:paragraph-rsid="00f0bb68"/> </style:style> <style:style style:name="P223" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> - <style:text-properties officeooo:rsid="007ab691" officeooo:paragraph-rsid="007ab691"/> + <style:text-properties officeooo:paragraph-rsid="007a1e4b"/> </style:style> <style:style style:name="P224" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> - <style:text-properties officeooo:paragraph-rsid="007bf983"/> + <style:text-properties officeooo:rsid="007ab691" officeooo:paragraph-rsid="007ab691"/> </style:style> <style:style style:name="P225" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> - <style:text-properties officeooo:rsid="008e53fe" officeooo:paragraph-rsid="008e53fe"/> + <style:text-properties officeooo:paragraph-rsid="007bf983"/> </style:style> <style:style style:name="P226" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> - <style:text-properties fo:font-style="italic" officeooo:rsid="00925c69" officeooo:paragraph-rsid="00925c69" style:font-style-asian="italic" style:font-style-complex="italic"/> + <style:text-properties officeooo:rsid="008e53fe" officeooo:paragraph-rsid="008e53fe"/> </style:style> <style:style style:name="P227" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> - <style:text-properties officeooo:paragraph-rsid="0090e55e"/> + <style:text-properties fo:font-style="italic" officeooo:rsid="00925c69" officeooo:paragraph-rsid="00925c69" style:font-style-asian="italic" style:font-style-complex="italic"/> </style:style> <style:style style:name="P228" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> - <style:text-properties officeooo:rsid="00925c69" officeooo:paragraph-rsid="00925c69"/> + <style:text-properties officeooo:paragraph-rsid="0090e55e"/> </style:style> <style:style style:name="P229" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> - <style:text-properties officeooo:rsid="00beeeb9" officeooo:paragraph-rsid="00beeeb9"/> + <style:text-properties officeooo:rsid="00925c69" officeooo:paragraph-rsid="00925c69"/> </style:style> <style:style style:name="P230" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> - <style:text-properties officeooo:rsid="00beeeb9" officeooo:paragraph-rsid="00c0dbdb"/> + <style:text-properties officeooo:rsid="00beeeb9" officeooo:paragraph-rsid="00beeeb9"/> </style:style> <style:style style:name="P231" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> - <style:text-properties fo:font-weight="bold" officeooo:rsid="00cfb468" officeooo:paragraph-rsid="00cfb468" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:text-properties officeooo:rsid="00beeeb9" officeooo:paragraph-rsid="00c0dbdb"/> </style:style> <style:style style:name="P232" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> - <style:text-properties fo:font-weight="bold" officeooo:rsid="00d08d3b" officeooo:paragraph-rsid="00d08d3b" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:text-properties fo:font-weight="bold" officeooo:rsid="00cfb468" officeooo:paragraph-rsid="00cfb468" style:font-weight-asian="bold" style:font-weight-complex="bold"/> </style:style> <style:style style:name="P233" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> - <style:text-properties fo:font-weight="bold" officeooo:rsid="00e1d614" officeooo:paragraph-rsid="00e1d614" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:text-properties fo:font-weight="bold" officeooo:rsid="00d08d3b" officeooo:paragraph-rsid="00d08d3b" style:font-weight-asian="bold" style:font-weight-complex="bold"/> </style:style> <style:style style:name="P234" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> - <style:text-properties officeooo:rsid="00d08d3b" officeooo:paragraph-rsid="00d08d3b"/> + <style:text-properties fo:font-weight="bold" officeooo:rsid="00e1d614" officeooo:paragraph-rsid="00e1d614" style:font-weight-asian="bold" style:font-weight-complex="bold"/> </style:style> <style:style style:name="P235" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> - <style:text-properties officeooo:paragraph-rsid="00dbc83d"/> + <style:text-properties officeooo:rsid="00d08d3b" officeooo:paragraph-rsid="00d08d3b"/> </style:style> <style:style style:name="P236" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> - <style:text-properties officeooo:paragraph-rsid="00dd5dd8"/> + <style:text-properties officeooo:paragraph-rsid="00dbc83d"/> </style:style> <style:style style:name="P237" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> + <style:text-properties officeooo:paragraph-rsid="00dd5dd8"/> + </style:style> + <style:style style:name="P238" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> <style:text-properties officeooo:paragraph-rsid="00f02006"/> </style:style> - <style:style style:name="P238" style:family="paragraph" style:parent-style-name="Preformatted_20_Text_20_Interrupt"> + <style:style style:name="P239" style:family="paragraph" style:parent-style-name="Preformatted_20_Text_20_Interrupt"> <style:text-properties officeooo:paragraph-rsid="008c2cba"/> </style:style> - <style:style style:name="P239" style:family="paragraph" style:parent-style-name="Preformatted_20_Text_20_Indented"> + <style:style style:name="P240" style:family="paragraph" style:parent-style-name="Preformatted_20_Text_20_Indented"> <style:text-properties fo:font-style="normal" officeooo:rsid="008f3b90" officeooo:paragraph-rsid="008f3b90" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> - <style:style style:name="P240" style:family="paragraph" style:parent-style-name="Preformatted_20_Text_20_Indented"> + <style:style style:name="P241" style:family="paragraph" style:parent-style-name="Preformatted_20_Text_20_Indented"> <style:text-properties fo:font-style="normal" fo:font-weight="normal" officeooo:rsid="00cba5e3" officeooo:paragraph-rsid="00d15d24" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-style-complex="normal" style:font-weight-complex="normal"/> </style:style> - <style:style style:name="P241" style:family="paragraph" style:parent-style-name="Preformatted_20_Text_20_Indented"> + <style:style style:name="P242" style:family="paragraph" style:parent-style-name="Preformatted_20_Text_20_Indented"> <style:text-properties fo:font-style="normal" fo:font-weight="normal" officeooo:rsid="00d15d24" officeooo:paragraph-rsid="00d15d24" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-style-complex="normal" style:font-weight-complex="normal"/> </style:style> - <style:style style:name="P242" style:family="paragraph" style:parent-style-name="Preformatted_20_Text_20_Indented"> + <style:style style:name="P243" style:family="paragraph" style:parent-style-name="Preformatted_20_Text_20_Indented"> <style:text-properties officeooo:paragraph-rsid="00cfb468"/> </style:style> - <style:style style:name="P243" style:family="paragraph" style:parent-style-name="Preformatted_20_Text_20_Indented"> + <style:style style:name="P244" style:family="paragraph" style:parent-style-name="Preformatted_20_Text_20_Indented"> <style:text-properties officeooo:rsid="00d08d3b" officeooo:paragraph-rsid="00d08d3b"/> </style:style> - <style:style style:name="P244" style:family="paragraph" style:parent-style-name="Preformatted_20_Text_20_Indented"> + <style:style style:name="P245" style:family="paragraph" style:parent-style-name="Preformatted_20_Text_20_Indented"> <style:text-properties officeooo:rsid="00d15d24" officeooo:paragraph-rsid="00d15d24"/> </style:style> - <style:style style:name="P245" style:family="paragraph" style:parent-style-name="Caption"> + <style:style style:name="P246" style:family="paragraph" style:parent-style-name="Caption"> <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/> </style:style> - <style:style style:name="P246" style:family="paragraph" style:parent-style-name="Contents_20_Heading"> + <style:style style:name="P247" style:family="paragraph" style:parent-style-name="Contents_20_Heading"> <style:paragraph-properties fo:break-before="page"/> </style:style> - <style:style style:name="P247" style:family="paragraph" style:parent-style-name="Heading_20_1"> + <style:style style:name="P248" style:family="paragraph" style:parent-style-name="Heading_20_1"> <style:paragraph-properties fo:break-before="page"/> <style:text-properties officeooo:rsid="000a3505" officeooo:paragraph-rsid="000a3505"/> </style:style> - <style:style style:name="P248" style:family="paragraph" style:parent-style-name="Contents_20_1"> + <style:style style:name="P249" style:family="paragraph" style:parent-style-name="Contents_20_1"> <style:paragraph-properties> <style:tab-stops> <style:tab-stop style:position="17cm" style:type="right" style:leader-style="dotted" style:leader-text="."/> </style:tab-stops> </style:paragraph-properties> </style:style> - <style:style style:name="P249" style:family="paragraph" style:parent-style-name="Contents_20_2"> + <style:style style:name="P250" style:family="paragraph" style:parent-style-name="Contents_20_2"> <style:paragraph-properties> <style:tab-stops> <style:tab-stop style:position="16.501cm" style:type="right" style:leader-style="dotted" style:leader-text="."/> </style:tab-stops> </style:paragraph-properties> </style:style> - <style:style style:name="P250" style:family="paragraph" style:parent-style-name="Contents_20_3"> + <style:style style:name="P251" style:family="paragraph" style:parent-style-name="Contents_20_3"> <style:paragraph-properties> <style:tab-stops> <style:tab-stop style:position="16.002cm" style:type="right" style:leader-style="dotted" style:leader-text="."/> </style:tab-stops> </style:paragraph-properties> </style:style> - <style:style style:name="P251" style:family="paragraph" style:parent-style-name="Heading_20_1"> + <style:style style:name="P252" style:family="paragraph" style:parent-style-name="Heading_20_1"> <style:text-properties officeooo:rsid="001888a2" officeooo:paragraph-rsid="009eea28"/> </style:style> - <style:style style:name="P252" style:family="paragraph" style:parent-style-name="Title" style:master-page-name=""> + <style:style style:name="P253" style:family="paragraph" style:parent-style-name="Title" style:master-page-name=""> <style:paragraph-properties style:page-number="auto"/> <style:text-properties officeooo:rsid="000a3505" officeooo:paragraph-rsid="000a3505"/> </style:style> - <style:style style:name="P253" style:family="paragraph" style:parent-style-name="Title" style:master-page-name=""> + <style:style style:name="P254" style:family="paragraph" style:parent-style-name="Title" style:master-page-name=""> <style:paragraph-properties style:page-number="auto"/> <style:text-properties officeooo:rsid="00cef9a3" officeooo:paragraph-rsid="00cef9a3"/> </style:style> - <style:style style:name="P254" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P255" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties officeooo:rsid="00750ebf" officeooo:paragraph-rsid="0074d148"/> </style:style> - <style:style style:name="P255" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P256" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties officeooo:rsid="00750ebf" officeooo:paragraph-rsid="00750ebf"/> </style:style> - <style:style style:name="P256" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P257" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties fo:font-style="normal" style:text-underline-style="none" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> - <style:style style:name="P257" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P258" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="009beecc" officeooo:paragraph-rsid="009beecc" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> - <style:style style:name="P258" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P259" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:paragraph-rsid="00c2926f" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> - <style:style style:name="P259" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P260" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties fo:font-style="normal" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> - <style:style style:name="P260" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P261" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties fo:font-style="normal" officeooo:paragraph-rsid="00931d47" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> - <style:style style:name="P261" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P262" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties fo:font-style="normal" officeooo:rsid="009715be" officeooo:paragraph-rsid="009acc7d" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> - <style:style style:name="P262" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P263" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties fo:font-style="normal" officeooo:rsid="009715be" officeooo:paragraph-rsid="00c6886f" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> - <style:style style:name="P263" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P264" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties officeooo:rsid="0063d022" officeooo:paragraph-rsid="0063d022"/> </style:style> - <style:style style:name="P264" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P265" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties officeooo:paragraph-rsid="00931d47"/> </style:style> - <style:style style:name="P265" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P266" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties officeooo:rsid="00c6886f" officeooo:paragraph-rsid="00c6886f"/> </style:style> - <style:style style:name="P266" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P267" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties officeooo:rsid="00d7bd9c" officeooo:paragraph-rsid="00d7bd9c"/> </style:style> - <style:style style:name="P267" style:family="paragraph" style:parent-style-name="Subtitle"> + <style:style style:name="P268" style:family="paragraph" style:parent-style-name="Subtitle"> <style:text-properties officeooo:rsid="000a3505" officeooo:paragraph-rsid="000a3505"/> </style:style> - <style:style style:name="P268" style:family="paragraph" style:parent-style-name="Subtitle"> + <style:style style:name="P269" style:family="paragraph" style:parent-style-name="Subtitle"> <style:text-properties officeooo:rsid="000a3505" officeooo:paragraph-rsid="00beeeb9"/> </style:style> - <style:style style:name="P269" style:family="paragraph" style:parent-style-name="Subtitle"> + <style:style style:name="P270" style:family="paragraph" style:parent-style-name="Subtitle"> <style:text-properties officeooo:rsid="00beeeb9" officeooo:paragraph-rsid="00beeeb9"/> </style:style> - <style:style style:name="P270" style:family="paragraph" style:parent-style-name="Heading_20_2"> + <style:style style:name="P271" style:family="paragraph" style:parent-style-name="Heading_20_2"> <style:text-properties officeooo:paragraph-rsid="00b17591"/> </style:style> - <style:style style:name="P271" style:family="paragraph" style:parent-style-name="Heading_20_2"> + <style:style style:name="P272" style:family="paragraph" style:parent-style-name="Heading_20_2"> <style:text-properties officeooo:rsid="00288fc1" officeooo:paragraph-rsid="00423119"/> </style:style> - <style:style style:name="P272" style:family="paragraph" style:parent-style-name="Heading_20_2"> + <style:style style:name="P273" style:family="paragraph" style:parent-style-name="Heading_20_2"> <style:text-properties officeooo:paragraph-rsid="00423119"/> </style:style> - <style:style style:name="P273" style:family="paragraph" style:parent-style-name="Heading_20_2"> + <style:style style:name="P274" style:family="paragraph" style:parent-style-name="Heading_20_2"> <style:text-properties officeooo:paragraph-rsid="0063d022"/> </style:style> - <style:style style:name="P274" style:family="paragraph" style:parent-style-name="Heading_20_2"> + <style:style style:name="P275" style:family="paragraph" style:parent-style-name="Heading_20_2"> <style:text-properties fo:font-style="normal" officeooo:paragraph-rsid="0086f697" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> - <style:style style:name="P275" style:family="paragraph" style:parent-style-name="Heading_20_2"> + <style:style style:name="P276" style:family="paragraph" style:parent-style-name="Heading_20_2"> <style:text-properties officeooo:paragraph-rsid="00f02006"/> </style:style> - <style:style style:name="P276" style:family="paragraph" style:parent-style-name="Title" style:master-page-name="First_20_Page"> - <style:paragraph-properties style:page-number="auto"/> - <style:text-properties officeooo:rsid="00cef9a3" officeooo:paragraph-rsid="00cef9a3"/> - </style:style> <style:style style:name="P277" style:family="paragraph" style:parent-style-name="Heading_20_2"> <style:text-properties officeooo:paragraph-rsid="00b17591"/> </style:style> @@ -1241,55 +1240,53 @@ <style:style style:name="P281" style:family="paragraph" style:parent-style-name="Heading_20_2"> <style:text-properties fo:font-style="normal" officeooo:paragraph-rsid="0086f697" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> - <style:style style:name="P282" style:family="paragraph" style:parent-style-name="Heading_20_1"> - <style:text-properties officeooo:rsid="001888a2" officeooo:paragraph-rsid="009eea28"/> + <style:style style:name="P282" style:family="paragraph" style:parent-style-name="Title" style:master-page-name="First_20_Page"> + <style:paragraph-properties style:page-number="auto"/> + <style:text-properties officeooo:rsid="00cef9a3" officeooo:paragraph-rsid="00cef9a3"/> </style:style> <style:style style:name="P283" style:family="paragraph" style:parent-style-name="Heading_20_1"> + <style:text-properties officeooo:rsid="001888a2" officeooo:paragraph-rsid="009eea28"/> + </style:style> + <style:style style:name="P284" style:family="paragraph" style:parent-style-name="Heading_20_1"> <style:paragraph-properties fo:break-before="page"/> <style:text-properties officeooo:rsid="000a3505" officeooo:paragraph-rsid="000a3505"/> </style:style> - <style:style style:name="P284" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P285" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties officeooo:rsid="00750ebf" officeooo:paragraph-rsid="0074d148"/> </style:style> - <style:style style:name="P285" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P286" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties officeooo:rsid="00750ebf" officeooo:paragraph-rsid="00750ebf"/> </style:style> - <style:style style:name="P286" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P287" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties officeooo:rsid="00d7bd9c" officeooo:paragraph-rsid="00d7bd9c"/> </style:style> - <style:style style:name="P287" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P288" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties fo:font-style="normal" style:text-underline-style="none" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> - <style:style style:name="P288" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P289" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="009beecc" officeooo:paragraph-rsid="009beecc" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> - <style:style style:name="P289" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P290" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:paragraph-rsid="00c2926f" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> - <style:style style:name="P290" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P291" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties fo:font-style="normal" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> - <style:style style:name="P291" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P292" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties fo:font-style="normal" officeooo:paragraph-rsid="00931d47" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> - <style:style style:name="P292" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P293" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties fo:font-style="normal" officeooo:rsid="009715be" officeooo:paragraph-rsid="00c6886f" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> - <style:style style:name="P293" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P294" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties officeooo:rsid="0063d022" officeooo:paragraph-rsid="0063d022"/> </style:style> - <style:style style:name="P294" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P295" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties officeooo:paragraph-rsid="00931d47"/> </style:style> - <style:style style:name="P295" style:family="paragraph" style:parent-style-name="Heading_20_3"> + <style:style style:name="P296" style:family="paragraph" style:parent-style-name="Heading_20_3"> <style:text-properties officeooo:rsid="00c6886f" officeooo:paragraph-rsid="00c6886f"/> </style:style> - <style:style style:name="P296" style:family="paragraph" style:parent-style-name="List_20_Contents"> - <style:text-properties fo:font-style="normal" officeooo:rsid="00dbc83d" officeooo:paragraph-rsid="00dbc83d" style:font-style-asian="normal" style:font-style-complex="normal"/> - </style:style> - <style:style style:name="P297" style:family="paragraph" style:parent-style-name="List_20_Contents"> - <style:text-properties officeooo:rsid="00f0bb68" officeooo:paragraph-rsid="00f0bb68"/> - </style:style> <style:style style:name="T1" style:family="text"> <style:text-properties officeooo:rsid="000be205"/> </style:style> @@ -2090,7 +2087,7 @@ <office:master-styles> <style:master-page style:name="Standard" style:page-layout-name="pm1"> <style:footer> - <text:p text:style-name="Footer"><text:page-number text:select-page="current">8</text:page-number><text:tab/><text:tab/><text:modification-date style:data-style-name="N84">2018-07-09</text:modification-date>, <text:modification-time style:data-style-name="N41">11:39:01</text:modification-time></text:p> + <text:p text:style-name="Footer"><text:page-number text:select-page="current">28</text:page-number><text:tab/><text:tab/><text:modification-date style:data-style-name="N84">2018-07-09</text:modification-date>, <text:modification-time style:data-style-name="N41">16:49:36</text:modification-time></text:p> </style:footer> </style:master-page> <style:master-page style:name="First_20_Page" style:display-name="First Page" style:page-layout-name="pm2" style:next-style-name="Standard"/> @@ -2105,10 +2102,10 @@ <text:sequence-decl text:display-outline-level="0" text:name="Text"/> <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/> </text:sequence-decls> - <text:p text:style-name="P276">Make Experiments!</text:p> - <text:p text:style-name="P268">Run-script generation for earth system models</text:p> - <text:p text:style-name="P269">Release <text:span text:style-name="T249">1.0</text:span>.<text:span text:style-name="T250">1dev</text:span></text:p> - <text:p text:style-name="P245">Karl-Hermann Wieners<text:line-break/><text:span text:style-name="T221">Max-Planck-Institut für Meteorologie<text:line-break/>Hamburg</text:span></text:p> + <text:p text:style-name="P282">Make Experiments!</text:p> + <text:p text:style-name="P269">Run-script generation for earth system models</text:p> + <text:p text:style-name="P270">Release <text:span text:style-name="T249">1.0</text:span>.<text:span text:style-name="T250">1</text:span></text:p> + <text:p text:style-name="P246">Karl-Hermann Wieners<text:line-break/><text:span text:style-name="T221">Max-Planck-Institut für Meteorologie<text:line-break/>Hamburg</text:span></text:p> <text:table-of-content text:style-name="Sect1" text:protected="true" text:name="Table of Contents1"> <text:table-of-content-source text:outline-level="10"> <text:index-title-template text:style-name="Contents_20_Heading">Table of Contents</text:index-title-template> @@ -2195,58 +2192,58 @@ </text:table-of-content-source> <text:index-body> <text:index-title text:style-name="Sect1" text:name="Table of Contents1_Head"> - <text:p text:style-name="P246">Table of Contents</text:p> + <text:p text:style-name="P247">Table of Contents</text:p> </text:index-title> - <text:p text:style-name="P248"><text:a xlink:type="simple" xlink:href="#__RefHeading__2518_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">1 Introduction<text:tab/>3</text:a></text:p> - <text:p text:style-name="P249"><text:a xlink:type="simple" xlink:href="#__RefHeading__2520_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">1.1 Example: ECHAM experiment setup<text:tab/>3</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2522_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">1.1.1 Experiments are defined by custom and default settings<text:tab/>3</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2524_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">1.1.2 Job templates are completed by settings to create scripts<text:tab/>4</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2526_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">1.1.3 Generating scripts only refers to the custom settings' file<text:tab/>6</text:a></text:p> - <text:p text:style-name="P248"><text:a xlink:type="simple" xlink:href="#__RefHeading__2528_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2 Details on experiment definition<text:tab/>6</text:a></text:p> - <text:p text:style-name="P249"><text:a xlink:type="simple" xlink:href="#__RefHeading__2530_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.1 Design<text:tab/>7</text:a></text:p> - <text:p text:style-name="P249"><text:a xlink:type="simple" xlink:href="#__RefHeading__2532_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.2 Tools<text:tab/>7</text:a></text:p> - <text:p text:style-name="P249"><text:a xlink:type="simple" xlink:href="#__RefHeading__2534_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.3 Format of .config files<text:tab/>8</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__1669_1438093122" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.3.1 Variables<text:tab/>8</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2536_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.3.2 Sections<text:tab/>9</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2538_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.3.3 Special variables and sections<text:tab/>9</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2540_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.3.4 Variable interpolation<text:tab/>11</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2542_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.3.5 Evaluation of interpolation<text:tab/>12</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2544_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.3.6 Special expressions<text:tab/>13</text:a></text:p> - <text:p text:style-name="P249"><text:a xlink:type="simple" xlink:href="#__RefHeading__2546_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.4 Format of .tmpl files<text:tab/>14</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2548_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.4.1 Placeholders<text:tab/>14</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2550_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.4.2 Variables in sections<text:tab/>14</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2552_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.4.3 Expressions<text:tab/>15</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2554_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.4.4 Loops<text:tab/>15</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2556_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.4.5 Conditions<text:tab/>16</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2558_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.4.6 Comments<text:tab/>16</text:a></text:p> - <text:p text:style-name="P249"><text:a xlink:type="simple" xlink:href="#__RefHeading__2560_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.5 Standard experiments<text:tab/>17</text:a></text:p> - <text:p text:style-name="P249"><text:a xlink:type="simple" xlink:href="#__RefHeading__2562_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.6 Standard options<text:tab/>17</text:a></text:p> - <text:p text:style-name="P249"><text:a xlink:type="simple" xlink:href="#__RefHeading__2564_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.7 Standard environments<text:tab/>18</text:a></text:p> - <text:p text:style-name="P249"><text:a xlink:type="simple" xlink:href="#__RefHeading__1508_1711940803" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.8 Generating jobs<text:tab/>18</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2566_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.8.1 Changing the model job list<text:tab/>19</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2568_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.8.2 Pre-defined job variables<text:tab/>19</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2570_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.8.3 Overriding namelist settings in derived jobs<text:tab/>20</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2572_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.8.4 Native script variables<text:tab/>20</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2574_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.8.5 Initializing native script variables<text:tab/>21</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2576_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.8.6 Re-generation of scripts and backup<text:tab/>22</text:a></text:p> - <text:p text:style-name="P249"><text:a xlink:type="simple" xlink:href="#__RefHeading__1883_1672291846" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.9 Defining namelists and other configuration files<text:tab/>22</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2578_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.9.1 Formatting the namelist information<text:tab/>23</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2580_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.9.2 Suppressing namelist groups or variables<text:tab/>23</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2714_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.9.3 Using the namelist text<text:tab/>24</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2584_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.9.4 Non-namelist configuration files<text:tab/>24</text:a></text:p> - <text:p text:style-name="P249"><text:a xlink:type="simple" xlink:href="#__RefHeading__2831_1132221942" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.10 Defining input files for an experiment<text:tab/>25</text:a></text:p> - <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2833_1132221942" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.10.1 Overriding input files for certain jobs<text:tab/>25</text:a></text:p> + <text:p text:style-name="P249"><text:a xlink:type="simple" xlink:href="#__RefHeading__2518_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">1 Introduction<text:tab/>3</text:a></text:p> + <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2520_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">1.1 Example: ECHAM experiment setup<text:tab/>3</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2522_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">1.1.1 Experiments are defined by custom and default settings<text:tab/>3</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2524_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">1.1.2 Job templates are completed by settings to create scripts<text:tab/>4</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2526_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">1.1.3 Generating scripts only refers to the custom settings' file<text:tab/>6</text:a></text:p> + <text:p text:style-name="P249"><text:a xlink:type="simple" xlink:href="#__RefHeading__2528_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2 Details on experiment definition<text:tab/>6</text:a></text:p> + <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2530_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.1 Design<text:tab/>7</text:a></text:p> + <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2532_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.2 Tools<text:tab/>7</text:a></text:p> + <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2534_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.3 Format of .config files<text:tab/>8</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__1669_1438093122" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.3.1 Variables<text:tab/>8</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2536_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.3.2 Sections<text:tab/>9</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2538_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.3.3 Special variables and sections<text:tab/>9</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2540_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.3.4 Variable interpolation<text:tab/>11</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2542_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.3.5 Evaluation of interpolation<text:tab/>12</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2544_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.3.6 Special expressions<text:tab/>13</text:a></text:p> + <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2546_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.4 Format of .tmpl files<text:tab/>14</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2548_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.4.1 Placeholders<text:tab/>14</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2550_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.4.2 Variables in sections<text:tab/>14</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2552_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.4.3 Expressions<text:tab/>15</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2554_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.4.4 Loops<text:tab/>15</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2556_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.4.5 Conditions<text:tab/>16</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2558_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.4.6 Comments<text:tab/>16</text:a></text:p> + <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2560_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.5 Standard experiments<text:tab/>17</text:a></text:p> + <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2562_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.6 Standard options<text:tab/>17</text:a></text:p> + <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2564_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.7 Standard environments<text:tab/>18</text:a></text:p> + <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__1508_1711940803" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.8 Generating jobs<text:tab/>18</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2566_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.8.1 Changing the model job list<text:tab/>19</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2568_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.8.2 Pre-defined job variables<text:tab/>19</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2570_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.8.3 Overriding namelist settings in derived jobs<text:tab/>20</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2572_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.8.4 Native script variables<text:tab/>20</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2574_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.8.5 Initializing native script variables<text:tab/>21</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2576_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.8.6 Re-generation of scripts and backup<text:tab/>22</text:a></text:p> + <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__1883_1672291846" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.9 Defining namelists and other configuration files<text:tab/>22</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2578_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.9.1 Formatting the namelist information<text:tab/>23</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2580_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.9.2 Suppressing namelist groups or variables<text:tab/>23</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2714_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.9.3 Using the namelist text<text:tab/>24</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2584_1114405012" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.9.4 Non-namelist configuration files<text:tab/>24</text:a></text:p> + <text:p text:style-name="P250"><text:a xlink:type="simple" xlink:href="#__RefHeading__2831_1132221942" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.10 Defining input files for an experiment<text:tab/>25</text:a></text:p> + <text:p text:style-name="P251"><text:a xlink:type="simple" xlink:href="#__RefHeading__2833_1132221942" text:style-name="Index_20_Link" text:visited-style-name="Index_20_Link">2.10.1 Overriding input files for certain jobs<text:tab/>25</text:a></text:p> </text:index-body> </text:table-of-content> <text:p text:style-name="P82"/> - <text:h text:style-name="P247" text:outline-level="1"><text:bookmark-start text:name="__RefHeading__2518_1114405012"/>Introduction<text:bookmark-end text:name="__RefHeading__2518_1114405012"/></text:h> + <text:h text:style-name="P248" text:outline-level="1"><text:bookmark-start text:name="__RefHeading__2518_1114405012"/>Introduction<text:bookmark-end text:name="__RefHeading__2518_1114405012"/></text:h> <text:p text:style-name="Text_20_body">Running a numerical earth system model experiment requires a number of preparatory and processing steps like staging input data files, providing namelists and other configuration data, housekeeping duties like model-time management, post-processing and storing <text:span text:style-name="T1">of </text:span>output data. These steps are usually put into scripts or another kind of job description that is finally executed on some high-performance computing system.</text:p> <text:p text:style-name="P1">The <text:span text:style-name="T146">Make Experiments! (</text:span>mkexp<text:span text:style-name="T146">)</text:span> toolbox provides a generic interface to setting up such a<text:span text:style-name="T1">n experiment</text:span>. At the heart of this <text:span text:style-name="T1">lies</text:span> the so-called .config file. This is a simple <text:span text:style-name="T1">text </text:span>file that contains the model settings for your experiment in a way that is <text:span text:style-name="T1">largely </text:span>independent of the job description that is later used to run it.</text:p> <text:p text:style-name="P4">To make this an easy task, MPI-M's models are delivered with a number of standard experiment types. Your own .config file will chose one of these, thus inheriting their settings for use in your experiment. Typically, it will also override or amend these settings for the purpose of your experiment.</text:p> <text:p text:style-name="P2">While the .config fil<text:span text:style-name="T2">e contains all necessary settings, there is much more to the actual job description. Therefore, the standard experiment types also provide templates (.tmpl files) for the jobs to run, that are then converted to the final job step descriptions, using the .config file settings. Besides, the .config file contains a 'jobs' section, where the job control flow and parameters of the job description itself may be adjusted, e.g. requiring more resources or disabling certain job steps.</text:span></text:p> <text:h text:style-name="Heading_20_2" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__2520_1114405012"/>Example: <text:span text:style-name="T3">ECHAM experiment setup</text:span><text:bookmark-end text:name="__RefHeading__2520_1114405012"/></text:h> <text:p text:style-name="P32">To illustrate the way <text:span text:style-name="T9">mkexp</text:span> works, let us look at the way that experiments with ECHAM, MPI-M's atmospheric circulation model, are set up.</text:p> - <text:h text:style-name="P254" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2522_1114405012"/>Experiments are defined by custom and default settings<text:bookmark-end text:name="__RefHeading__2522_1114405012"/></text:h> + <text:h text:style-name="P255" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2522_1114405012"/>Experiments are defined by custom and default settings<text:bookmark-end text:name="__RefHeading__2522_1114405012"/></text:h> <text:p text:style-name="P3">ECHAM comes with five <text:span text:style-name="T191">pre-defined </text:span>experiment types, amip-LR, amip-MR, amip-HR, sstClim-LR and sstClim-MR. <text:span text:style-name="T3">To set up an experiment based on one of these, like amip-LR, all you have to do is create your own experiment configuration file within ECHAM's run subdirectory, e.g. 'joe1234.config', setting amip-LR as experiment type and providing an experiment description with the header comment:</text:span></text:p> <text:p text:style-name="P98"><text:soft-page-break/># Standard AMIP experiment as baseline for further experiments (LR)</text:p> <text:p text:style-name="P98"/> @@ -2272,7 +2269,7 @@ <text:p text:style-name="P103">ATMO_INPUT_ROOT = /pool/data/ECHAM6/input/r0004 </text:p> <text:p text:style-name="P103">LAND_INPUT_ROOT = /pool/data/JSBACH/input/r0004 </text:p> <text:p text:style-name="P6">The final configuration is then merged from all of these three sources, where the experiment configuration may override <text:span text:style-name="T45">or amend </text:span>settings from the experiment type, and the type config may in turn change the model defaults.</text:p> - <text:h text:style-name="P255" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2524_1114405012"/>Job templates are completed by settings to create scripts<text:bookmark-end text:name="__RefHeading__2524_1114405012"/></text:h> + <text:h text:style-name="P256" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2524_1114405012"/>Job templates are completed by settings to create scripts<text:bookmark-end text:name="__RefHeading__2524_1114405012"/></text:h> <text:p text:style-name="P6"><text:span text:style-name="T190">Now the experiment configuration is finalized, the </text:span>settings are used to fill in <text:span text:style-name="T190">a kind of job description forms, so called </text:span><text:span text:style-name="T9">templates</text:span><text:span text:style-name="T190">, </text:span>from which eventually the <text:span text:style-name="T190">actual </text:span>job description files are created. As the structure of<text:span text:style-name="T190"> </text:span>jobs is largely independent of the model resolution, all amip- experiment types share the same set of template files. One of them is <text:span text:style-name="T211">'</text:span>amip.run.tmpl<text:span text:style-name="T211">'</text:span>, also within the run/standard_experiments subdirectory. <text:span text:style-name="T6">The excerpt below shows that t</text:span>his looks mostly like a shell script, but contains <text:span text:style-name="T145">placeholders</text:span> that are filled using the .config file information:</text:p> <text:p text:style-name="P103"><text:soft-page-break/>#! /bin/bash</text:p> <text:p text:style-name="P103"/> @@ -2339,15 +2336,15 @@ <text:p text:style-name="P13"><text:span text:style-name="T190">So, as soon as</text:span> <text:span text:style-name="T190">you have set up '</text:span>joe1234.config<text:span text:style-name="T190">'</text:span>, you may create the job scripts that are needed to run your experiment. Still within ECHAM's <text:span text:style-name="T192">'</text:span>run<text:span text:style-name="T192">'</text:span> subdirectory, type the following into your terminal:</text:p> <text:p text:style-name="Preformatted_20_Text">../util/mkexp/mkexp joe1234.config</text:p> <text:p text:style-name="P14">This will <text:span text:style-name="T146">read all configuration information and </text:span>create all job scripts that are defined within your experiment's setup, <text:span text:style-name="T146">using their respective templates as shown in the previous section</text:span>. <text:span text:style-name="T9">mkexp</text:span> will put these <text:span text:style-name="T146">scripts </text:span>in <text:span text:style-name="T146">a common</text:span> directory defined by the .config variable <text:span text:style-name="T192">'</text:span>SCRIPT_DIR<text:span text:style-name="T192">'</text:span>, and <text:span text:style-name="T192">print</text:span> the name of this directory on your terminal.</text:p> - <text:h text:style-name="P251" text:outline-level="1"><text:bookmark-start text:name="__RefHeading__2528_1114405012"/>Details on <text:span text:style-name="T210">experiment</text:span> <text:span text:style-name="T210">definition</text:span><text:bookmark-end text:name="__RefHeading__2528_1114405012"/></text:h> + <text:h text:style-name="P252" text:outline-level="1"><text:bookmark-start text:name="__RefHeading__2528_1114405012"/>Details on <text:span text:style-name="T210">experiment</text:span> <text:span text:style-name="T210">definition</text:span><text:bookmark-end text:name="__RefHeading__2528_1114405012"/></text:h> <text:p text:style-name="P15">With the introductory example of the previous section in mind, this section will give some more detailed information on specific aspects of <text:span text:style-name="T9">mkexp</text:span><text:span text:style-name="T48">.</text:span></text:p> - <text:h text:style-name="P270" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__2530_1114405012"/><text:soft-page-break/>Design<text:bookmark-end text:name="__RefHeading__2530_1114405012"/></text:h> + <text:h text:style-name="P271" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__2530_1114405012"/><text:soft-page-break/>Design<text:bookmark-end text:name="__RefHeading__2530_1114405012"/></text:h> <text:p text:style-name="P34">Experiment definition with <text:span text:style-name="T9">mkexp</text:span> <text:span text:style-name="T172">is organized</text:span> <text:span text:style-name="T172">in</text:span> three levels.</text:p> <text:p text:style-name="P34">The first level is the <text:span text:style-name="T9">mkexp</text:span> toolbox. It provides the front end to create an executable job description from a generic experiment configuration, <text:span text:style-name="T171">but does not contain any model specific information. Instead a basic set of conventions is defined that should be applicable to a very large range of model systems. When this document uses the term </text:span><text:span text:style-name="T18">mkexp</text:span><text:span text:style-name="T54">, it refers to this system level.</text:span></text:p> <text:p text:style-name="P34"><text:span text:style-name="T171">At a second level, a model needs to provide a number of files containing the information needed by </text:span><text:span text:style-name="T17">mkexp</text:span><text:span text:style-name="T171">: the required job steps and their interaction, the basic contents of job scripts, model specific information, and building blocks that may be combined to define a specific experiment. This is called the </text:span><text:span text:style-name="T17">model setup</text:span><text:span text:style-name="T53">. The files must maintain the naming conventions prescribed by </text:span><text:span text:style-name="T17">mkexp</text:span><text:span text:style-name="T53">.</text:span></text:p> <text:p text:style-name="P35"><text:span text:style-name="T48">Finally, the third level is the actual experiment definition. Here the user decides which of the building blocks from the previous level are needed, and </text:span><text:span text:style-name="T85">defines</text:span><text:span text:style-name="T48"> experiment specific settings that override or amend the information from the model setup. It is also essential to supply an experiment description and a – possibly unique – experiment identifier. All this is called the </text:span><text:span text:style-name="T9">user setup</text:span><text:span text:style-name="T48">.</text:span></text:p> <text:p text:style-name="P36"><text:span text:style-name="T48">All levels should make a clear distinction </text:span><text:span text:style-name="T55">between </text:span><text:span text:style-name="T48">the .config files, containing the experiment's configuration information, </text:span><text:span text:style-name="T55">and </text:span><text:span text:style-name="T48">the .tmpl files, containing the actual job description and job control syntax.</text:span></text:p> - <text:h text:style-name="P271" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__2532_1114405012"/>Tools<text:bookmark-end text:name="__RefHeading__2532_1114405012"/></text:h> + <text:h text:style-name="P272" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__2532_1114405012"/>Tools<text:bookmark-end text:name="__RefHeading__2532_1114405012"/></text:h> <text:p text:style-name="P83"><text:span text:style-name="T146">The </text:span><text:span text:style-name="T32">mkexp</text:span><text:span text:style-name="T146"> package provides a number of tools for working with script configurations and setups.</text:span></text:p> <text:p text:style-name="Preformatted_20_List_20_Heading">mkexp <text:span text:style-name="T240">[-m] [-g] </text:span><text:span text:style-name="T23">file</text:span><text:span text:style-name="T66">.</text:span><text:span text:style-name="T48">config</text:span> [<text:span text:style-name="T9">name</text:span>=<text:span text:style-name="T9">value</text:span> ...]</text:p> <text:p text:style-name="P200"><text:span text:style-name="T146">This is the main tool for generating an experiment setup. It </text:span>takes <text:span text:style-name="T193">the given</text:span> <text:span text:style-name="T193">user setup</text:span> and <text:span text:style-name="T212">the model setup that is referenced by the user setup </text:span>to generate <text:span text:style-name="T193">the</text:span> <text:span text:style-name="T193">job description files or</text:span> scripts that <text:span text:style-name="T212">are required to run a model experiment as specified in </text:span><text:span text:style-name="T21">file.</text:span><text:span text:style-name="T66">config</text:span><text:span text:style-name="T193">.</text:span></text:p> @@ -2355,20 +2352,20 @@ <text:p text:style-name="P203">mkexp<text:span text:style-name="T48"> allows to override </text:span><text:span text:style-name="T64">or amend </text:span><text:span text:style-name="T48">the .config file settings on the command line </text:span><text:span text:style-name="T64">by defining or re-defining a variable </text:span><text:span text:style-name="T194">name</text:span><text:span text:style-name="T64"> set to </text:span><text:span text:style-name="T194">value</text:span><text:span text:style-name="T64">. Section variables are referenced as </text:span><text:span text:style-name="T194">sectionname</text:span><text:span text:style-name="T64">.</text:span><text:span text:style-name="T194">variablename</text:span><text:span text:style-name="T64">. Any periods in the variable name have to be duplicated, e.g. to set '.remove' in section 'jobs' to 'post', use 'jobs...remove=post'. Note that three periods will always be read as '.' followed by </text:span><text:soft-page-break/><text:span text:style-name="T64">'..', thus it is not possible to use variable names th</text:span><text:span text:style-name="T86">at</text:span><text:span text:style-name="T64"> </text:span><text:span text:style-name="T194">end</text:span><text:span text:style-name="T64"> </text:span><text:span text:style-name="T86">i</text:span><text:span text:style-name="T64">n a period.</text:span></text:p> <text:p text:style-name="P218"><text:span text:style-name="T64">W</text:span><text:span text:style-name="T48">hen given the '-m' or '--no-make-dirs' option, only the </text:span><text:span text:style-name="T65">script</text:span><text:span text:style-name="T48"> directory is created while creation of the </text:span><text:span text:style-name="T65">run-time and outpu</text:span><text:span text:style-name="T48">t directories is skipped.</text:span></text:p> <text:p text:style-name="P220">With '-g' or '--getexp', instead of a .config file, <text:span text:style-name="T9">mkexp</text:span><text:span text:style-name="T48"> expects a dump generated by </text:span><text:span text:style-name="T9">getexp -vv</text:span><text:span text:style-name="T48"> (see below). The experiment setup is regenerated from this dump, overriding any model setup.</text:span></text:p> - <text:p text:style-name="P223"><text:span text:style-name="T64">g</text:span><text:span text:style-name="T48">etexp [-v ...] </text:span><text:span text:style-name="T97">[-R]</text:span><text:span text:style-name="T48"> </text:span><text:span text:style-name="T103">[-k </text:span><text:span text:style-name="T39">key</text:span><text:span text:style-name="T103">] </text:span><text:span text:style-name="T9">file</text:span><text:span text:style-name="T48">.config [</text:span><text:span text:style-name="T9">name</text:span><text:span text:style-name="T48">=</text:span><text:span text:style-name="T9">value ...</text:span><text:span text:style-name="T48">]</text:span></text:p> + <text:p text:style-name="P224"><text:span text:style-name="T64">g</text:span><text:span text:style-name="T48">etexp [-v ...] </text:span><text:span text:style-name="T97">[-R]</text:span><text:span text:style-name="T48"> </text:span><text:span text:style-name="T103">[-k </text:span><text:span text:style-name="T39">key</text:span><text:span text:style-name="T103">] </text:span><text:span text:style-name="T9">file</text:span><text:span text:style-name="T48">.config [</text:span><text:span text:style-name="T9">name</text:span><text:span text:style-name="T48">=</text:span><text:span text:style-name="T9">value ...</text:span><text:span text:style-name="T48">]</text:span></text:p> <text:p text:style-name="P201">getexp<text:span text:style-name="T48"> reads the experiment setup the same way </text:span><text:span text:style-name="T86">as</text:span><text:span text:style-name="T48"> </text:span>mkexp<text:span text:style-name="T48">, but does not generate job scripts. Instead it prints the experiment name and directories to be generated in a shell-readable form. It is intended for debugging or passing setup information to utility scripts.</text:span></text:p> <text:p text:style-name="P205"><text:span text:style-name="T48">When given the '-v' </text:span><text:span text:style-name="T97">or '--</text:span><text:span text:style-name="T48">verbose</text:span><text:span text:style-name="T97">'</text:span><text:span text:style-name="T48"> option, all </text:span><text:span text:style-name="T9">global</text:span><text:span text:style-name="T48"> configuration variables and their values are printed in alphabetical order. </text:span><text:span text:style-name="T97">When given twice, the whole configuration is dumped </text:span><text:span text:style-name="T102">to the screen</text:span><text:span text:style-name="T97">. </text:span><text:span text:style-name="T102">Save this to a file for use with </text:span><text:span text:style-name="T38">mkexp -g</text:span><text:span text:style-name="T102">.</text:span></text:p> <text:p text:style-name="P192">When given the '-R' or '--readme' option, the header comment text is printed.</text:p> - <text:p text:style-name="P297">When given the '-k' or '--key' option, only the configured value for <text:span text:style-name="T9">key</text:span> is printed. Section variables may be referenced as described above for <text:span text:style-name="T9">name</text:span>=<text:span text:style-name="T9">value</text:span><text:span text:style-name="T48">.</text:span></text:p> - <text:p text:style-name="P235">diffexp <text:span text:style-name="T22">file</text:span><text:span text:style-name="T23">1</text:span><text:span text:style-name="T195">.config </text:span><text:span text:style-name="T22">file2</text:span><text:span text:style-name="T65">.</text:span><text:span text:style-name="T66">config</text:span></text:p> + <text:p text:style-name="P222">When given the '-k' or '--key' option, only the configured value for <text:span text:style-name="T9">key</text:span> is printed. Section variables may be referenced as described above for <text:span text:style-name="T9">name</text:span>=<text:span text:style-name="T9">value</text:span><text:span text:style-name="T48">.</text:span></text:p> + <text:p text:style-name="P236">diffexp <text:span text:style-name="T22">file</text:span><text:span text:style-name="T23">1</text:span><text:span text:style-name="T195">.config </text:span><text:span text:style-name="T22">file2</text:span><text:span text:style-name="T65">.</text:span><text:span text:style-name="T66">config</text:span></text:p> <text:p text:style-name="P189">For an easy comparison of the whole set of generated scripts for two different experiments, this tool takes the directories defined in each configuration, locates the job scripts corresponding to each other (e.g. exp0001.run and exp0002.run), equalizes all occurrences of the experiment name in the scripts and then uses the diff tool to show differences. The environment variable 'DIFF' may be set to an alternative tool to be called instead.</text:p> - <text:p text:style-name="P224">rmexp <text:span text:style-name="T24">file</text:span><text:span text:style-name="T196">.config</text:span><text:span text:style-name="T67"> [</text:span><text:span text:style-name="T24">name</text:span><text:span text:style-name="T67">=</text:span><text:span text:style-name="T24">value ...</text:span><text:span text:style-name="T67">]</text:span></text:p> + <text:p text:style-name="P225">rmexp <text:span text:style-name="T24">file</text:span><text:span text:style-name="T196">.config</text:span><text:span text:style-name="T67"> [</text:span><text:span text:style-name="T24">name</text:span><text:span text:style-name="T67">=</text:span><text:span text:style-name="T24">value ...</text:span><text:span text:style-name="T67">]</text:span></text:p> <text:p text:style-name="P207">This allows <text:span text:style-name="T199">interactive </text:span>remov<text:span text:style-name="T199">al for </text:span>all data of an experiment without having to deal with path names, as these are read from the configuration.</text:p> - <text:p text:style-name="P237"><text:span text:style-name="T241">cp</text:span>exp <text:span text:style-name="T24">file</text:span><text:span text:style-name="T196">.config</text:span><text:span text:style-name="T67"> </text:span><text:span text:style-name="T37">new_name</text:span><text:span text:style-name="T98"> </text:span><text:span text:style-name="T67">[</text:span><text:span text:style-name="T24">name</text:span><text:span text:style-name="T67">=</text:span><text:span text:style-name="T24">value ...</text:span><text:span text:style-name="T67">]</text:span></text:p> + <text:p text:style-name="P238"><text:span text:style-name="T241">cp</text:span>exp <text:span text:style-name="T24">file</text:span><text:span text:style-name="T196">.config</text:span><text:span text:style-name="T67"> </text:span><text:span text:style-name="T37">new_name</text:span><text:span text:style-name="T98"> </text:span><text:span text:style-name="T67">[</text:span><text:span text:style-name="T24">name</text:span><text:span text:style-name="T67">=</text:span><text:span text:style-name="T24">value ...</text:span><text:span text:style-name="T67">]</text:span></text:p> <text:p text:style-name="P221"><text:span text:style-name="T242">Replicates all data </text:span>of an experiment <text:span text:style-name="T241">to a new experiment name; also updates text files by rewriting references to the old name</text:span>.</text:p> - <text:p text:style-name="P237"><text:span text:style-name="T251">du</text:span>exp <text:span text:style-name="T24">file</text:span><text:span text:style-name="T196">.config</text:span><text:span text:style-name="T67"> [</text:span><text:span text:style-name="T24">name</text:span><text:span text:style-name="T67">=</text:span><text:span text:style-name="T24">value ...</text:span><text:span text:style-name="T67">]</text:span></text:p> + <text:p text:style-name="P238"><text:span text:style-name="T251">du</text:span>exp <text:span text:style-name="T24">file</text:span><text:span text:style-name="T196">.config</text:span><text:span text:style-name="T67"> [</text:span><text:span text:style-name="T24">name</text:span><text:span text:style-name="T67">=</text:span><text:span text:style-name="T24">value ...</text:span><text:span text:style-name="T67">]</text:span></text:p> <text:p text:style-name="P221"><text:span text:style-name="T251">Shows disk usage for all data that has been created by</text:span> <text:span text:style-name="T251">an</text:span> experiment.</text:p> - <text:h text:style-name="P275" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__2534_1114405012"/><text:span text:style-name="T152">F</text:span>ormat of .config files<text:bookmark-end text:name="__RefHeading__2534_1114405012"/></text:h> + <text:h text:style-name="P276" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__2534_1114405012"/><text:span text:style-name="T152">F</text:span>ormat of .config files<text:bookmark-end text:name="__RefHeading__2534_1114405012"/></text:h> <text:p text:style-name="P15">The .config files are simple text files containing a dictionary of variables with their respective values. They may be structured using sections and comments. <text:span text:style-name="T147">For reading these files, </text:span><text:span text:style-name="T12">mkexp</text:span><text:span text:style-name="T147"> uses the </text:span><text:span text:style-name="T12">configobj</text:span><text:span text:style-name="T147"> Python library. All settings found in the .config files are handled as Python variables internally.</text:span></text:p> <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__1669_1438093122"/><text:soft-page-break/>Variables<text:bookmark-end text:name="__RefHeading__1669_1438093122"/></text:h> <text:p text:style-name="P18">A <text:span text:style-name="T148">configuration variable is set by simply assigning a text value to a name, as in</text:span></text:p> @@ -2384,7 +2381,7 @@ <text:p text:style-name="P123"><text:s text:c="4"/>description = This is the first section</text:p> <text:p text:style-name="P22">will be stored as a dictionary section1 with section1['description'] set to 'This is the first section'.</text:p> <text:p text:style-name="P22">Sections may be nested to arbitrary depth by incrementing the number of bracket pairs <text:span text:style-name="T150">as in</text:span></text:p> - <text:p text:style-name="Preformatted_20_Text">[section1]</text:p> + <text:p text:style-name="Preformatted_20_Text"><text:soft-page-break/>[section1]</text:p> <text:p text:style-name="Preformatted_20_Text"><text:s text:c="4"/>description = This is the first section</text:p> <text:p text:style-name="Preformatted_20_Text"><text:s text:c="4"/>[[subsection1a]]</text:p> <text:p text:style-name="Preformatted_20_Text"><text:s text:c="8"/>description = This is the first sub section of the first section</text:p> @@ -2393,7 +2390,7 @@ <text:p text:style-name="P117">[section2]</text:p> <text:p text:style-name="P117"><text:s text:c="4"/>description = This is the second section </text:p> <text:p text:style-name="P23"><text:span text:style-name="T197">A s</text:span>ection <text:span text:style-name="T197">is</text:span> closed by the beginning of a new section of the same level, by a section <text:span text:style-name="T197">of </text:span>l<text:span text:style-name="T197">ower</text:span> <text:span text:style-name="T197">nesting </text:span>depth, <text:span text:style-name="T197">or the end of the .config file</text:span>. Thus, section1 will contain 'description' and two dictionaries 'subsection1' and 'subsection2', each of those containing their own 'description'. 'section2' then is a top-level dictionary, again with its own 'description' variable.</text:p> - <text:p text:style-name="P23"><text:soft-page-break/>Note that indentation may be used to make the file more legible but is completely ignored when the file is loaded. The number of brackets is the only way to define the level of a section. This means that all variables in a section must be defined before any subsections. Otherwise, the variable <text:s/>would be<text:span text:style-name="T151">long</text:span> to the respective subsection.</text:p> + <text:p text:style-name="P23">Note that indentation may be used to make the file more legible but is completely ignored when the file is loaded. The number of brackets is the only way to define the level of a section. This means that all variables in a section must be defined before any subsections. Otherwise, the variable <text:s/>would be<text:span text:style-name="T151">long</text:span> to the respective subsection.</text:p> <text:p text:style-name="P22">Fortran scholars will also want to note that names are case-sensitive, i.e. the variable 'NAME' is quite different from 'name'. Usually, setups use upper-case names for global variables and lower-case names for sections and their variables.</text:p> <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2538_1114405012"/>Special <text:span text:style-name="T189">v</text:span>ariables <text:span text:style-name="T189">and sections</text:span><text:bookmark-end text:name="__RefHeading__2538_1114405012"/></text:h> <text:p text:style-name="P39"><text:span text:style-name="T48">There are a number of special variables that influence the way </text:span>mkexp<text:span text:style-name="T48"> works. They must be present in one of the .config files, unless noted otherwise below. </text:span><text:span text:style-name="T52">They are listed here for a first overview. Their exact meaning is explained in more detail in the upcoming sections.</text:span></text:p> @@ -2406,7 +2403,7 @@ <text:p text:style-name="P183">Directory for storing output data. When a model run finishes, output will be stored there for further processing. Will also be created when non-existent.</text:p> <text:p text:style-name="P172">VERSION_</text:p> <text:p text:style-name="P190">Each .config file in the model setup <text:span text:style-name="T227">should</text:span> set this variable to a suitable value, e.g. version control information. The values are collected in a variable 'VERSIONS_' which is usually written to the resulting job descriptions.</text:p> - <text:p text:style-name="P173">SETUP_OPTIONS (<text:span text:style-name="T9">optional</text:span>)</text:p> + <text:p text:style-name="P173"><text:soft-page-break/>SETUP_OPTIONS (<text:span text:style-name="T9">optional</text:span>)</text:p> <text:p text:style-name="P187">Subset of the model's standard options that should be applied to <text:span text:style-name="T236">all</text:span> experiment<text:span text:style-name="T236">s using the same model version</text:span>. </text:p> <text:p text:style-name="P41">There is a second set of variables that belongs in the user setup:</text:p> <text:p text:style-name="P170">EXP_TYPE</text:p> @@ -2415,7 +2412,7 @@ <text:p text:style-name="P182">Selects one of the standard host environments that are available for the model.</text:p> <text:p text:style-name="P176"><text:span text:style-name="T48">EXP_OPTIONS (</text:span><text:span text:style-name="T9">optional</text:span><text:span text:style-name="T48">)</text:span></text:p> <text:p text:style-name="P186">Subset of the model's standard options that should be applied to the current experiment definition.</text:p> - <text:p text:style-name="P177"><text:soft-page-break/>EXP_ID (<text:span text:style-name="T9">optional</text:span>)</text:p> + <text:p text:style-name="P177">EXP_ID (<text:span text:style-name="T9">optional</text:span>)</text:p> <text:p text:style-name="P198">Name of the experiment to be created. If not set, this will be set to the base name of the user's .config file, e.g. 'joe1234' in the introductory example. All job description files will carry this as the first part of their name. For almost all model setups, this will be used in the definitions of SCRIPT_DIR, WORK_DIR, and DATA_DIR.</text:p> <text:p text:style-name="P165">EXP_DESCRIPTION <text:span text:style-name="T170">(</text:span><text:span text:style-name="T16">optional</text:span><text:span text:style-name="T170">)</text:span></text:p> <text:p text:style-name="P184">Extensive description of the experiment to be created. If not set, this will contain all text in the header comment of the user's .config file. The leading comment characters and leading and trailing empty lines are removed. Note that <text:span text:style-name="T213">both header comment and </text:span>EXP_DESCRIPTION may reference any other global variable defined in the experiment configuration <text:span text:style-name="T213">(see section </text:span><text:span text:style-name="T213"><text:bookmark-ref text:reference-format="chapter" text:ref-name="__RefHeading__2540_1114405012">2.3.4</text:bookmark-ref></text:span><text:span text:style-name="T213">)</text:span>.</text:p> @@ -2432,13 +2429,13 @@ <text:p text:style-name="P65">These special sections are usually pre-defined in the model setup, but are commonly altered by the user.</text:p> <text:p text:style-name="List_20_Heading">[jobs]</text:p> <text:p text:style-name="P199">This section defines the job description set needed for an experiment. It also provides job specific settings. Details are given in section <text:bookmark-ref text:reference-format="chapter" text:ref-name="__RefHeading__1508_1711940803">2.7</text:bookmark-ref>, '<text:bookmark-ref text:reference-format="text" text:ref-name="__RefHeading__1508_1711940803">Generating jobs</text:bookmark-ref>'.</text:p> - <text:p text:style-name="List_20_Heading">[namelists]</text:p> + <text:p text:style-name="List_20_Heading"><text:soft-page-break/>[namelists]</text:p> <text:p text:style-name="P199">Information that is contained in model configuration or namelist files is set in this section. For further details see section <text:bookmark-ref text:reference-format="chapter" text:ref-name="__RefHeading__1883_1672291846">2.9</text:bookmark-ref>, <text:span text:style-name="T202">'</text:span><text:span text:style-name="T202"><text:bookmark-ref text:reference-format="text" text:ref-name="__RefHeading__1883_1672291846">Defining namelists and other configuration files</text:bookmark-ref></text:span><text:span text:style-name="T202">'.</text:span></text:p> <text:p text:style-name="P179">[files]</text:p> <text:p text:style-name="P212">All input files that are needed for an experiment and <text:span text:style-name="T224">information</text:span> to provide them go into this section. <text:span text:style-name="T224">See section </text:span><text:span text:style-name="T224"><text:bookmark-ref text:reference-format="chapter" text:ref-name="__RefHeading__2831_1132221942">2.10</text:bookmark-ref></text:span><text:span text:style-name="T224">, '</text:span><text:span text:style-name="T224"><text:bookmark-ref text:reference-format="text" text:ref-name="__RefHeading__2831_1132221942">Defining input files for an experiment</text:bookmark-ref></text:span><text:span text:style-name="T224">'.</text:span></text:p> <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2540_1114405012"/>Variable interpolation<text:bookmark-end text:name="__RefHeading__2540_1114405012"/></text:h> <text:p text:style-name="P72">The value of a .config variable may reference the value of another variable by prefixing its name with <text:span text:style-name="T203">a </text:span>dollar sign. <text:span text:style-name="T203">This is called </text:span><text:span text:style-name="T26">interpolation</text:span><text:span text:style-name="T74"> of variables. E.g.</text:span></text:p> - <text:p text:style-name="P151"><text:soft-page-break/># joe1234.config</text:p> + <text:p text:style-name="P151"># joe1234.config</text:p> <text:p text:style-name="P157">WORK_ROOT = /scratch/joe</text:p> <text:p text:style-name="Preformatted_20_Text">WORK_DIR = $WORK_ROOT/experiments/<text:span text:style-name="T204">$EXP_ID</text:span></text:p> <text:p text:style-name="P74">will set 'WORK_DIR' to '/scratch/joe/experiments/joe1234'.</text:p> @@ -2460,11 +2457,11 @@ <text:p text:style-name="P75">The user<text:span text:style-name="T214">'</text:span>s <text:span text:style-name="T9">environment variables</text:span> may be referenced as global variables in a .config file. Thus a user may write something like</text:p> <text:p text:style-name="Preformatted_20_Text">SCRIPT_ROOT = $HOME/experiments/$EXP_ID</text:p> <text:p text:style-name="P75">setting 'SCRIPT_ROOT' to a subdirectory of the user's home directory.</text:p> - <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2542_1114405012"/>Evaluation of interpolation<text:bookmark-end text:name="__RefHeading__2542_1114405012"/></text:h> + <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2542_1114405012"/><text:soft-page-break/>Evaluation of interpolation<text:bookmark-end text:name="__RefHeading__2542_1114405012"/></text:h> <text:p text:style-name="P76">While interpolation looks a lot like in shell scripts, there is a major difference: interpolation is – as in Makefiles – only evaluated when the final value is written or passed on. This has the advantage that the model setup may define settings based on variables that are only defined later in the user setup.</text:p> <text:p text:style-name="P154"># model setup</text:p> - <text:p text:style-name="P238"><text:span text:style-name="T206">MODEL</text:span>_<text:span text:style-name="T206">DIR</text:span> = $HOME/<text:span text:style-name="T206">$MODEL_SUBDIR</text:span></text:p> - <text:p text:style-name="P155"><text:soft-page-break/># user setup</text:p> + <text:p text:style-name="P239"><text:span text:style-name="T206">MODEL</text:span>_<text:span text:style-name="T206">DIR</text:span> = $HOME/<text:span text:style-name="T206">$MODEL_SUBDIR</text:span></text:p> + <text:p text:style-name="P155"># user setup</text:p> <text:p text:style-name="P155">MODEL_SUBDIR = echam</text:p> <text:p text:style-name="P77">Here, as the model setup is read before the user setup, 'MODEL_SUBDIR' is not set when 'MODEL_ROOT' is defined. <text:span text:style-name="T207">This works, because i</text:span>nterpolation of 'MODEL_ROOT's value is postponed until all levels of setup have been read.</text:p> <text:p text:style-name="P77">The disadvantage is that there may be no incremental adding of values to a given variable because this would cause circular dependencies. Imagine</text:p> @@ -2473,30 +2470,30 @@ <text:p text:style-name="Preformatted_20_Text">Oops: interpolation loop detected in value "SUBMODELS" while reading key 'SUBMODELS'</text:p> <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2544_1114405012"/>Special expressions<text:bookmark-end text:name="__RefHeading__2544_1114405012"/></text:h> <text:p text:style-name="P79">For some applications, simply including some other variable is not enough. You might want to compute a time limit from a given constant divided by the number of computing nodes, or convert a time stamp to a list of values. For these purposes, <text:span text:style-name="T9">mkexp</text:span><text:span text:style-name="T48"> includes some special expressions, that are evaluated when interpolation occurs.</text:span></text:p> - <text:p text:style-name="P225"><text:span text:style-name="T9">variable</text:span><text:span text:style-name="T48"> = </text:span><text:span text:style-name="T127">eval(</text:span><text:span text:style-name="T9">expression</text:span><text:span text:style-name="T127">)</text:span><text:span text:style-name="T48"><text:line-break/></text:span><text:span text:style-name="T9">variable</text:span><text:span text:style-name="T48"> = </text:span><text:span text:style-name="T127">evals(</text:span><text:span text:style-name="T9">expression</text:span><text:span text:style-name="T127">)</text:span></text:p> + <text:p text:style-name="P226"><text:span text:style-name="T9">variable</text:span><text:span text:style-name="T48"> = </text:span><text:span text:style-name="T127">eval(</text:span><text:span text:style-name="T9">expression</text:span><text:span text:style-name="T127">)</text:span><text:span text:style-name="T48"><text:line-break/></text:span><text:span text:style-name="T9">variable</text:span><text:span text:style-name="T48"> = </text:span><text:span text:style-name="T127">evals(</text:span><text:span text:style-name="T9">expression</text:span><text:span text:style-name="T127">)</text:span></text:p> <text:p text:style-name="P208"><text:span text:style-name="T78">I</text:span><text:span text:style-name="T48">nterpret </text:span><text:span text:style-name="T9">expression</text:span><text:span text:style-name="T48"> as a valid Python expression and assign the result to </text:span><text:span text:style-name="T9">variable</text:span><text:span text:style-name="T48"> as a string. When the result is a list, </text:span><text:span text:style-name="T9">eval</text:span><text:span text:style-name="T48"> will return a list of strings, while </text:span><text:span text:style-name="T9">evals</text:span><text:span text:style-name="T48"> will return a single string, where elements are joined by a comma and a space.</text:span></text:p> <text:p text:style-name="P208"><text:span text:style-name="T48">Note that interpolation does not work for list values; if you need this, consider to set the original variable </text:span><text:span text:style-name="T75">to a string containing a Python list expression</text:span><text:span text:style-name="T48">, and </text:span><text:span text:style-name="T75">then </text:span><text:span text:style-name="T48">use </text:span><text:span text:style-name="T9">eval</text:span><text:span text:style-name="T48"> </text:span><text:span text:style-name="T88">a</text:span><text:span text:style-name="T48">round the interpolation expression:</text:span></text:p> - <text:p text:style-name="P239">DATE_<text:span text:style-name="T215">STRING</text:span> = '[2010, 10, 20]' # need quotes here!</text:p> - <text:p text:style-name="P239">DATE_<text:span text:style-name="T215">LIST</text:span> = eval($DATE_<text:span text:style-name="T216">STRING</text:span>) # becomes a 3 element list</text:p> - <text:p text:style-name="P226">variable<text:span text:style-name="T48"> = </text:span><text:span text:style-name="T127">read(</text:span>file_name<text:span text:style-name="T127">)</text:span></text:p> + <text:p text:style-name="P240"><text:soft-page-break/>DATE_<text:span text:style-name="T215">STRING</text:span> = '[2010, 10, 20]' # need quotes here!</text:p> + <text:p text:style-name="P240">DATE_<text:span text:style-name="T215">LIST</text:span> = eval($DATE_<text:span text:style-name="T216">STRING</text:span>) # becomes a 3 element list</text:p> + <text:p text:style-name="P227">variable<text:span text:style-name="T48"> = </text:span><text:span text:style-name="T127">read(</text:span>file_name<text:span text:style-name="T127">)</text:span></text:p> <text:p text:style-name="P202"><text:span text:style-name="T48">Read the contents of the file </text:span>file_name<text:span text:style-name="T48"> and assign its contents to </text:span>variable<text:span text:style-name="T48"> as a string.</text:span></text:p> - <text:p text:style-name="P227"><text:span text:style-name="T27">variable</text:span><text:span text:style-name="T76"> = </text:span><text:span text:style-name="T129">split_date(</text:span><text:span text:style-name="T27">timestamp</text:span><text:span text:style-name="T129">)</text:span></text:p> - <text:p text:style-name="P209"><text:span text:style-name="T208">T</text:span>ake <text:span text:style-name="T9">timestamp</text:span><text:span text:style-name="T48"> and split it into a list of numerical date/time elements. </text:span><text:span text:style-name="T9">tim</text:span><text:span text:style-name="T28">e</text:span><text:span text:style-name="T9">stamp</text:span><text:span text:style-name="T48"> </text:span><text:span text:style-name="T77">must have </text:span><text:span text:style-name="T48">an ISO-like format (date elements separated by '-'; 'T' or </text:span><text:soft-page-break/><text:span text:style-name="T48">space as date/time separator; time elements separated by ':</text:span><text:span text:style-name="T77">'; </text:span><text:span text:style-name="T48">trailing time elements </text:span><text:span text:style-name="T78">and their separators </text:span><text:span text:style-name="T77">are optional</text:span><text:span text:style-name="T48">; time zone indicator is not supported). </text:span><text:span text:style-name="T90">Unlike ISO, </text:span><text:span text:style-name="T31">split_date</text:span><text:span text:style-name="T90"> also</text:span><text:span text:style-name="T48"> </text:span><text:span text:style-name="T90">allows the date to be in the form YYYYMMDD</text:span><text:span text:style-name="T48">. </text:span><text:span text:style-name="T78">Unset fields default to zero.</text:span></text:p> - <text:p text:style-name="P228"><text:span text:style-name="T9">variable</text:span><text:span text:style-name="T48"> = </text:span><text:span text:style-name="T127">sec2time(</text:span><text:span text:style-name="T9">second_of_day</text:span><text:span text:style-name="T127">)</text:span></text:p> + <text:p text:style-name="P228"><text:span text:style-name="T27">variable</text:span><text:span text:style-name="T76"> = </text:span><text:span text:style-name="T129">split_date(</text:span><text:span text:style-name="T27">timestamp</text:span><text:span text:style-name="T129">)</text:span></text:p> + <text:p text:style-name="P209"><text:span text:style-name="T208">T</text:span>ake <text:span text:style-name="T9">timestamp</text:span><text:span text:style-name="T48"> and split it into a list of numerical date/time elements. </text:span><text:span text:style-name="T9">tim</text:span><text:span text:style-name="T28">e</text:span><text:span text:style-name="T9">stamp</text:span><text:span text:style-name="T48"> </text:span><text:span text:style-name="T77">must have </text:span><text:span text:style-name="T48">an ISO-like format (date elements separated by '-'; 'T' or space as date/time separator; time elements separated by ':</text:span><text:span text:style-name="T77">'; </text:span><text:span text:style-name="T48">trailing time elements </text:span><text:span text:style-name="T78">and their separators </text:span><text:span text:style-name="T77">are optional</text:span><text:span text:style-name="T48">; time zone indicator is not supported). </text:span><text:span text:style-name="T90">Unlike ISO, </text:span><text:span text:style-name="T31">split_date</text:span><text:span text:style-name="T90"> also</text:span><text:span text:style-name="T48"> </text:span><text:span text:style-name="T90">allows the date to be in the form YYYYMMDD</text:span><text:span text:style-name="T48">. </text:span><text:span text:style-name="T78">Unset fields default to zero.</text:span></text:p> + <text:p text:style-name="P229"><text:span text:style-name="T9">variable</text:span><text:span text:style-name="T48"> = </text:span><text:span text:style-name="T127">sec2time(</text:span><text:span text:style-name="T9">second_of_day</text:span><text:span text:style-name="T127">)</text:span></text:p> <text:p text:style-name="P194">Take integer <text:span text:style-name="T9">second_of_day</text:span> (from 0 to 86399) and return the corresponding time stamp as string of the form HH:MM:SS.</text:p> - <text:p text:style-name="P229"><text:span text:style-name="T9">variable</text:span> = '<text:span text:style-name="T133">add_years</text:span>(<text:span text:style-name="T9">datestamp</text:span>, <text:span text:style-name="T9">offset</text:span>)'</text:p> + <text:p text:style-name="P230"><text:span text:style-name="T9">variable</text:span> = '<text:span text:style-name="T133">add_years</text:span>(<text:span text:style-name="T9">datestamp</text:span>, <text:span text:style-name="T9">offset</text:span>)'</text:p> <text:p text:style-name="P210">Take integer <text:span text:style-name="T9">offset</text:span><text:span text:style-name="T48"> (may be negative), add it to the year portion of </text:span><text:span text:style-name="T9">datestamp</text:span><text:span text:style-name="T48"> and return the resulting date string.</text:span></text:p> - <text:p text:style-name="P230"><text:span text:style-name="T9">variable</text:span> = '<text:span text:style-name="T133">add_</text:span><text:span text:style-name="T141">days</text:span>(<text:span text:style-name="T9">datestamp</text:span>, <text:span text:style-name="T9">offset</text:span>)'</text:p> + <text:p text:style-name="P231"><text:span text:style-name="T9">variable</text:span> = '<text:span text:style-name="T133">add_</text:span><text:span text:style-name="T141">days</text:span>(<text:span text:style-name="T9">datestamp</text:span>, <text:span text:style-name="T9">offset</text:span>)'</text:p> <text:p text:style-name="P211"><text:span text:style-name="T48">Take integer </text:span><text:span text:style-name="T9">offset</text:span><text:span text:style-name="T48"> (may be negative), add it to the </text:span><text:span text:style-name="T91">day</text:span><text:span text:style-name="T48"> portion of </text:span><text:span text:style-name="T9">datestamp</text:span><text:span text:style-name="T48"> and return the resulting date string. </text:span><text:span text:style-name="T91">Year and month portions will be set as appropriate, assuming a Proleptic Gregorian calendar with year 0.</text:span></text:p> <text:h text:style-name="Heading_20_2" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__2546_1114405012"/>Format of .tmpl files<text:bookmark-end text:name="__RefHeading__2546_1114405012"/></text:h> <text:p text:style-name="P24">The .tmpl files are also text files mostly written in the syntax of the job description that <text:span text:style-name="T9">mkexp</text:span> is meant to create. Currently this is usually the ksh or bash shell script syntax, but may also be any other interpreted language, like Perl or Python, or even a configuration or namelist file. The main difference are placeholders and structured comments that are embedded in the program text. These are evaluated or expanded using the information that comes with the .config files, to create the final text files, defining the jobs to be run on the target system.</text:p> <text:p text:style-name="P24">The expansion of .tmpl files into the job description uses the <text:span text:style-name="T9">Jinja</text:span> Python library. It provides a default set of facilities that can be used to expand any textual template. The proposed default syntax was slightly customized to fit the needs of <text:span text:style-name="T9">mkexp</text:span>.</text:p> <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2548_1114405012"/>Placeholders<text:bookmark-end text:name="__RefHeading__2548_1114405012"/></text:h> - <text:p text:style-name="P25">The simplest interaction in a template is replacing a template's placeholder by a value from a .config file. <text:span text:style-name="T153">Any name enclosed by '%{' and '}' is taken to be a configuration variable, like in the snippets below:</text:span></text:p> + <text:p text:style-name="P25">The simplest interaction in a template is replacing a template's placeholder by a value from a .config file. <text:span text:style-name="T153">Any name enclosed by '%{' and '}' is taken to be a configuration </text:span><text:soft-page-break/><text:span text:style-name="T153">variable, like in the snippets below:</text:span></text:p> <text:p text:style-name="Preformatted_20_Text">#! /bin/ksh</text:p> <text:p text:style-name="Preformatted_20_Text"><text:span text:style-name="T154">#</text:span> This script was <text:span text:style-name="T154">crea</text:span>ted by %{NAME}</text:p> <text:p text:style-name="P33">Here, the placehol<text:span text:style-name="T198">d</text:span>er requests the 'NAME' variable which was set to 'Joe User' in the example .config file <text:span text:style-name="T198">of section </text:span><text:span text:style-name="T198"><text:bookmark-ref text:reference-format="chapter" text:ref-name="__RefHeading__1669_1438093122">2.3.1</text:bookmark-ref></text:span>. This value is now looked up in the <text:span text:style-name="T198">configuration</text:span> and used to textually replace the placeholder expression, yield<text:span text:style-name="T198">ing</text:span> the final text:</text:p> - <text:p text:style-name="P120"><text:soft-page-break/>#! /bin/ksh</text:p> + <text:p text:style-name="P120">#! /bin/ksh</text:p> <text:p text:style-name="P119"><text:span text:style-name="T155"># </text:span>This script was <text:span text:style-name="T155">crea</text:span>ted by <text:span text:style-name="T153">Joe User</text:span></text:p> <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2550_1114405012"/><text:span text:style-name="T157">V</text:span>ariables in sections<text:bookmark-end text:name="__RefHeading__2550_1114405012"/></text:h> <text:p text:style-name="P26">To request a variable within a section, simply prepend the section name to the variable name, using '.' as separator, as in</text:p> @@ -2518,40 +2515,40 @@ <text:p text:style-name="P122">LIST_SUBLIST=%{PATH[1:3]}</text:p> <text:p text:style-name="Preformatted_20_Text">FILTERED_STRING=%{NAME | <text:span text:style-name="T157">lower()} <text:s/># is 'joe user'</text:span></text:p> <text:p text:style-name="P92">The last example allows for <text:span text:style-name="T169">a </text:span>number of predefined filters instead of 'lower'. These are described in the <text:span text:style-name="T9">Jinja</text:span> documentation (List of Builtin Filters). <text:span text:style-name="T231">Besides, </text:span><text:span text:style-name="T9">mkexp</text:span> defines <text:s/><text:span text:style-name="T234">a number of </text:span>additional filters:</text:p> - <text:p text:style-name="P231">split<text:span text:style-name="T163">(</text:span><text:span text:style-name="T43">s</text:span><text:span text:style-name="T130">, </text:span><text:span text:style-name="T43">m</text:span><text:span text:style-name="T130">=-1)</text:span></text:p> + <text:p text:style-name="P232"><text:soft-page-break/>split<text:span text:style-name="T163">(</text:span><text:span text:style-name="T43">s</text:span><text:span text:style-name="T130">, </text:span><text:span text:style-name="T43">m</text:span><text:span text:style-name="T130">=-1)</text:span></text:p> <text:p text:style-name="P195">cuts <text:span text:style-name="T233">the input </text:span>string <text:span text:style-name="T233">at all occurrences of </text:span><text:span text:style-name="T34">s</text:span><text:span text:style-name="T233">, returning</text:span> a list of substrings. <text:span text:style-name="T232">If </text:span><text:span text:style-name="T33">m</text:span><text:span text:style-name="T232"> is positive or zero, it cuts only at the first </text:span><text:span text:style-name="T33">m</text:span><text:span text:style-name="T232"> occurrences; the last element contains the remaining substring:</text:span></text:p> <text:p text:style-name="Preformatted_20_Text_20_Indented">%{ 'A B C' | <text:span text:style-name="T133">split</text:span><text:span text:style-name="T163">(' ') }<text:tab/><text:tab/>→</text:span><text:span text:style-name="T166"> </text:span><text:span text:style-name="T165">['A', 'B', 'C']</text:span></text:p> - <text:p text:style-name="P242"><text:span text:style-name="T165">%{ 'A B C' | split(' ', </text:span><text:span text:style-name="T143">1</text:span><text:span text:style-name="T165">) } <text:tab/></text:span><text:span text:style-name="T166">→ </text:span><text:span text:style-name="T165">['A', </text:span><text:span text:style-name="T143">'B C'</text:span><text:span text:style-name="T165">]</text:span></text:p> + <text:p text:style-name="P243"><text:span text:style-name="T165">%{ 'A B C' | split(' ', </text:span><text:span text:style-name="T143">1</text:span><text:span text:style-name="T165">) } <text:tab/></text:span><text:span text:style-name="T166">→ </text:span><text:span text:style-name="T165">['A', </text:span><text:span text:style-name="T143">'B C'</text:span><text:span text:style-name="T165">]</text:span></text:p> <text:p text:style-name="P213"/> - <text:p text:style-name="P116"><text:soft-page-break/>filter<text:span text:style-name="T163">()</text:span></text:p> + <text:p text:style-name="P116">filter<text:span text:style-name="T163">()</text:span></text:p> <text:p text:style-name="P214">removes empty elements from <text:span text:style-name="T233">the input</text:span> list:</text:p> - <text:p text:style-name="P243"><text:span text:style-name="T165">%{ ['A', '', 'C'] | </text:span><text:span text:style-name="T143">filter</text:span><text:span text:style-name="T165">() }<text:tab/>→</text:span><text:span text:style-name="T163"> ['A', 'C']</text:span></text:p> - <text:p text:style-name="P232">match<text:span text:style-name="T163">(</text:span><text:span text:style-name="T43">regexp</text:span><text:span text:style-name="T163">, </text:span><text:span text:style-name="T43">default</text:span><text:span text:style-name="T163">='')</text:span></text:p> + <text:p text:style-name="P244"><text:span text:style-name="T165">%{ ['A', '', 'C'] | </text:span><text:span text:style-name="T143">filter</text:span><text:span text:style-name="T165">() }<text:tab/>→</text:span><text:span text:style-name="T163"> ['A', 'C']</text:span></text:p> + <text:p text:style-name="P233">match<text:span text:style-name="T163">(</text:span><text:span text:style-name="T43">regexp</text:span><text:span text:style-name="T163">, </text:span><text:span text:style-name="T43">default</text:span><text:span text:style-name="T163">='')</text:span></text:p> <text:p text:style-name="P215"><text:span text:style-name="T163">returns the input string</text:span><text:span text:style-name="T130">, if </text:span><text:span text:style-name="T43">regexp</text:span><text:span text:style-name="T130"> matches somewhere in it. If </text:span><text:span text:style-name="T43">regexp</text:span><text:span text:style-name="T130"> contains matching groups (parentheses), the substring matching the first group is returned. If no match is found, the </text:span><text:span text:style-name="T43">default</text:span><text:span text:style-name="T130"> string is returned:</text:span></text:p> - <text:p text:style-name="P243"><text:span text:style-name="T130">%{ 'Douglas Adams' | </text:span><text:span text:style-name="T127">match</text:span><text:span text:style-name="T130">('Adam') }<text:tab/><text:tab/>→ 'Douglas Adams'</text:span></text:p> - <text:p text:style-name="P243"><text:span text:style-name="T130">%{ 'Douglas Adams' | match(</text:span><text:span text:style-name="T127">'Eve'</text:span><text:span text:style-name="T130">) }<text:tab/><text:tab/>→ ''</text:span></text:p> - <text:p text:style-name="P243"><text:span text:style-name="T130">%{ 'Douglas Adams' | match('Abel', </text:span><text:span text:style-name="T127">'Cain'</text:span><text:span text:style-name="T130">) }<text:tab/>→ 'Cain'</text:span></text:p> - <text:p text:style-name="P243"><text:span text:style-name="T130">%{ 'Douglas Adams' | match('l</text:span><text:span text:style-name="T127">(.*)</text:span><text:span text:style-name="T130">m') }<text:tab/><text:tab/>→ 'as Ada'</text:span></text:p> - <text:p text:style-name="P234"><text:span text:style-name="T127">wordwrap</text:span><text:span text:style-name="T130">(width=79, break_long_words=true, break_on_hyphens=true, <text:s text:c="2"/><text:line-break/> <text:s text:c="8"/>wrapstring=none)</text:span></text:p> + <text:p text:style-name="P244"><text:span text:style-name="T130">%{ 'Douglas Adams' | </text:span><text:span text:style-name="T127">match</text:span><text:span text:style-name="T130">('Adam') }<text:tab/><text:tab/>→ 'Douglas Adams'</text:span></text:p> + <text:p text:style-name="P244"><text:span text:style-name="T130">%{ 'Douglas Adams' | match(</text:span><text:span text:style-name="T127">'Eve'</text:span><text:span text:style-name="T130">) }<text:tab/><text:tab/>→ ''</text:span></text:p> + <text:p text:style-name="P244"><text:span text:style-name="T130">%{ 'Douglas Adams' | match('Abel', </text:span><text:span text:style-name="T127">'Cain'</text:span><text:span text:style-name="T130">) }<text:tab/>→ 'Cain'</text:span></text:p> + <text:p text:style-name="P244"><text:span text:style-name="T130">%{ 'Douglas Adams' | match('l</text:span><text:span text:style-name="T127">(.*)</text:span><text:span text:style-name="T130">m') }<text:tab/><text:tab/>→ 'as Ada'</text:span></text:p> + <text:p text:style-name="P235"><text:span text:style-name="T127">wordwrap</text:span><text:span text:style-name="T130">(width=79, break_long_words=true, break_on_hyphens=true, <text:s text:c="2"/><text:line-break/> <text:s text:c="8"/>wrapstring=none)</text:span></text:p> <text:p text:style-name="P217"><text:span text:style-name="T130">replaces the </text:span><text:span text:style-name="T131">builtin </text:span><text:span text:style-name="T44">Jinja </text:span><text:span text:style-name="T131">filter 'wordwrap' <text:s/>by a private version that allows to suppress breaks on hyphens:</text:span></text:p> - <text:p text:style-name="P240">%{'long-hyphenated-text'|<text:span text:style-name="T133">wordwrap</text:span>(15, false)}</text:p> - <text:p text:style-name="P244"><text:span text:style-name="T131">→</text:span><text:span text:style-name="T130"> 'long- </text:span></text:p> - <text:p text:style-name="P241"><text:s text:c="3"/>hyphenated-text'</text:p> - <text:p text:style-name="P244"/> - <text:p text:style-name="P240">%{'long-hyphenated-text'|wordwrap(15, false, <text:span text:style-name="T133">false</text:span>)} </text:p> - <text:p text:style-name="P244"><text:span text:style-name="T131">→</text:span><text:span text:style-name="T130"> 'long-</text:span><text:span text:style-name="T131">hyphenated-text'</text:span></text:p> + <text:p text:style-name="P241">%{'long-hyphenated-text'|<text:span text:style-name="T133">wordwrap</text:span>(15, false)}</text:p> + <text:p text:style-name="P245"><text:span text:style-name="T131">→</text:span><text:span text:style-name="T130"> 'long- </text:span></text:p> + <text:p text:style-name="P242"><text:s text:c="3"/>hyphenated-text'</text:p> + <text:p text:style-name="P245"/> + <text:p text:style-name="P241">%{'long-hyphenated-text'|wordwrap(15, false, <text:span text:style-name="T133">false</text:span>)} </text:p> + <text:p text:style-name="P245"><text:span text:style-name="T131">→</text:span><text:span text:style-name="T130"> 'long-</text:span><text:span text:style-name="T131">hyphenated-text'</text:span></text:p> <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2554_1114405012"/>Loops<text:bookmark-end text:name="__RefHeading__2554_1114405012"/></text:h> <text:p text:style-name="P28">Text in a template may be used repeatedly, like a classical 'for' loop. Loops are defined by structured comments <text:span text:style-name="T217">i.e. lines </text:span>beginning with '#%'. <text:span text:style-name="T217">They </text:span>start with '#% for … <text:span text:style-name="T160">in …:</text:span>' and end in '#% endfor':</text:p> <text:p text:style-name="Preformatted_20_Text"><text:span text:style-name="T133">#% for</text:span> countdown <text:span text:style-name="T133">in</text:span> [3, 2, 1, '<text:span text:style-name="T217">liftoff</text:span>']<text:span text:style-name="T133">:</text:span></text:p> <text:p text:style-name="Preformatted_20_Text">echo %{countdown}</text:p> <text:p text:style-name="P108">#% endfor</text:p> <text:p text:style-name="P28">will <text:span text:style-name="T158">be expanded by </text:span><text:span text:style-name="T30">mkexp</text:span><text:span text:style-name="T158"> to </text:span>yield</text:p> - <text:p text:style-name="Preformatted_20_Text">echo 3</text:p> + <text:p text:style-name="Preformatted_20_Text"><text:soft-page-break/>echo 3</text:p> <text:p text:style-name="Preformatted_20_Text">echo 2</text:p> <text:p text:style-name="Preformatted_20_Text">echo 1</text:p> <text:p text:style-name="Preformatted_20_Text">echo <text:span text:style-name="T217">liftoff</text:span></text:p> <text:p text:style-name="P31"><text:span text:style-name="T160">You may of course use expressions in the loop definition. </text:span>For classical, index based loops, there is a 'range' function as in Python, <text:span text:style-name="T160">and the size of a list is queried with the 'length' filter</text:span>.</text:p> - <text:p text:style-name="P121"><text:soft-page-break/>#% for index in <text:span text:style-name="T133">range(1, </text:span><text:span text:style-name="T136">PATH|length()</text:span><text:span text:style-name="T133">)</text:span> <text:s/><text:span text:style-name="T160"># PATH was defined in </text:span><text:span text:style-name="T160"><text:bookmark-ref text:reference-format="chapter" text:ref-name="__RefHeading__1669_1438093122">2.3.1</text:bookmark-ref></text:span></text:p> + <text:p text:style-name="P121">#% for index in <text:span text:style-name="T133">range(1, </text:span><text:span text:style-name="T136">PATH|length()</text:span><text:span text:style-name="T133">)</text:span> <text:s/><text:span text:style-name="T160"># PATH was defined in </text:span><text:span text:style-name="T160"><text:bookmark-ref text:reference-format="chapter" text:ref-name="__RefHeading__1669_1438093122">2.3.1</text:bookmark-ref></text:span></text:p> <text:p text:style-name="Preformatted_20_Text"><text:span text:style-name="T160">echo</text:span> %<text:span text:style-name="T161">{index}: </text:span>%{<text:span text:style-name="T160">PATH[</text:span>index<text:span text:style-name="T160">]</text:span>} <text:s/></text:p> <text:p text:style-name="Preformatted_20_Text">#% endfor</text:p> <text:p text:style-name="Text_20_body">Note that <text:span text:style-name="T159">indexing of lists starts at 0,</text:span> <text:span text:style-name="T159">i.e. the first element of the PATH list is skipped. Besides, </text:span>the stop index <text:span text:style-name="T161">is</text:span> not included, i.e. <text:span text:style-name="T160">as PATH has a length of 3, </text:span>the last looping has index <text:span text:style-name="T159">2</text:span>:</text:p> @@ -2570,9 +2567,9 @@ <text:p text:style-name="P37">If PATH is defined as in the examples above, this will result in</text:p> <text:p text:style-name="Preformatted_20_Text">diff3 /bin /usr/bin /usr/local/bin</text:p> <text:p text:style-name="P30"><text:span text:style-name="T161"><text:s/>For a list of available tests, see the </text:span><text:span text:style-name="T15">Jinja</text:span><text:span text:style-name="T168"> documentation.</text:span></text:p> - <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2558_1114405012"/>Comments<text:bookmark-end text:name="__RefHeading__2558_1114405012"/></text:h> + <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2558_1114405012"/><text:soft-page-break/>Comments<text:bookmark-end text:name="__RefHeading__2558_1114405012"/></text:h> <text:p text:style-name="P58"><text:span text:style-name="T9">Jinj</text:span>a also allows template comments that are removed when the template is expanded. This is implemented as another kind of structured comment starting with <text:span text:style-name="T218">'#%</text:span>#':</text:p> - <text:p text:style-name="Preformatted_20_Text"><text:soft-page-break/># This comment will make it to the expanded script</text:p> + <text:p text:style-name="Preformatted_20_Text"># This comment will make it to the expanded script</text:p> <text:p text:style-name="Preformatted_20_Text">#%# This one will not make it <text:span text:style-name="T177">and is for template documentation only</text:span></text:p> <text:h text:style-name="Heading_20_2" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__2560_1114405012"/>Standard experiment<text:span text:style-name="T46">s</text:span><text:bookmark-end text:name="__RefHeading__2560_1114405012"/></text:h> <text:p text:style-name="P16">When generating an experiment setup, <text:span text:style-name="T9">mkexp</text:span> expects the .config and .tmpl files to reside in a subdirectory of the current working directory, called 'standard_experiments'.</text:p> @@ -2582,11 +2579,11 @@ <text:h text:style-name="Heading_20_2" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__2562_1114405012"/>Standard options<text:bookmark-end text:name="__RefHeading__2562_1114405012"/></text:h> <text:p text:style-name="P11">Besides the standard experiment types, <text:span text:style-name="T9">mkexp</text:span> also supports option sets that are independent of the experiment type chosen.</text:p> <text:p text:style-name="P11">Usually these option sets contain a number of settings needed for a certain technical aspect, e.g. for changing the output interval or aggregation method for output data, or providing resolution dependent model settings. They reside in a subdirectory 'standard_options' of the current working directory, each in their respective <text:span text:style-name="T9">optionname</text:span>.config file.</text:p> - <text:p text:style-name="P11">Within the experiment's .config file, options are selected by setting the variable EXP_OPTIONS to the list of required option names. These settings are loaded after the experiment type configuration but before the user defined experiment configuration.</text:p> - <text:h text:style-name="P266" text:outline-level="3"><text:soft-page-break/><text:span text:style-name="T238">O</text:span>ptions set due to model configuration </text:h> + <text:p text:style-name="P11"><text:soft-page-break/>Within the experiment's .config file, options are selected by setting the variable EXP_OPTIONS to the list of required option names. These settings are loaded after the experiment type configuration but before the user defined experiment configuration.</text:p> + <text:h text:style-name="P267" text:outline-level="3"><text:span text:style-name="T238">O</text:span>ptions set due to model configuration </text:h> <text:p text:style-name="P93">Some options may need to be set <text:span text:style-name="T237">for all experiments that use a given </text:span>model configuration. <text:span text:style-name="T237">If e.g. a part of the model is disabled at build time, the corresponding option set should also be disabled for all experiments.</text:span></text:p> <text:p text:style-name="P94">For this, the build process may write an optional file 'SETUP.config' <text:s/>that is read before any type or user configuration. If this file contains the variable SETUP_OPTIONS, the options listed there will be loaded before loading the EXP_OPTIONS list. Do not override SETUP_OPTIONS in the user configuration unless you know what you are doing!</text:p> - <text:h text:style-name="P273" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__1508_1711940803"/>Generating <text:span text:style-name="T185">j</text:span>obs<text:bookmark-end text:name="__RefHeading__1508_1711940803"/></text:h> + <text:h text:style-name="P274" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__1508_1711940803"/>Generating <text:span text:style-name="T185">j</text:span>obs<text:bookmark-end text:name="__RefHeading__1508_1711940803"/></text:h> <text:p text:style-name="P42">When<text:span text:style-name="T173"> </text:span>running <text:span text:style-name="T9">mkexp</text:span><text:span text:style-name="T104">, </text:span><text:span text:style-name="T105">the special configuration section [jobs]</text:span><text:span text:style-name="T41"> </text:span><text:span text:style-name="T105">is read and evaluated. Each of its subsections, e.g. [[run]], defines a job definition file or job script to be created.</text:span></text:p> <text:p text:style-name="P138"># <text:span text:style-name="T174">model setup: experiment type 'control'</text:span></text:p> <text:p text:style-name="P125">[jobs]</text:p> @@ -2596,8 +2593,8 @@ <text:p text:style-name="P43"><text:span text:style-name="T105">For each of </text:span><text:span text:style-name="T107">the jobs defined in the model setup above</text:span><text:span text:style-name="T105">, there </text:span><text:span text:style-name="T107">must</text:span><text:span text:style-name="T105"> be a template file in the model setup, </text:span><text:span text:style-name="T107">e.g. for [[run]] </text:span><text:span text:style-name="T105">either as 'control.run.tmpl' or 'DEFAULT.run.tmpl'. </text:span><text:span text:style-name="T106">The corresponding</text:span><text:span text:style-name="T105"> file is expanded to its final form using the </text:span><text:span text:style-name="T106">full</text:span><text:span text:style-name="T105"> experiment configuration, </text:span><text:span text:style-name="T106">as described before</text:span><text:span text:style-name="T105">. Besides, the </text:span><text:span text:style-name="T106">job specific </text:span><text:span text:style-name="T105">variable</text:span><text:span text:style-name="T106">s</text:span><text:span text:style-name="T105"> </text:span><text:span text:style-name="T106">are set and passed according to their respective template</text:span><text:span text:style-name="T105">.</text:span></text:p> <text:p text:style-name="P43"><text:span text:style-name="T108">The resulting job scripts are </text:span><text:span text:style-name="T107">written to the directory defined by SCRIPT_DIR, </text:span><text:span text:style-name="T108">e.g. </text:span><text:span text:style-name="T107">as 'joe1234.run', </text:span><text:span text:style-name="T108">and marked as being executable. </text:span><text:span text:style-name="T114">Besides, as mentioned before, the contents of the special variable EXP_DESCRIPTION is written to a README file in that same directory. </text:span><text:span text:style-name="T117">Also, an update script is created that allows to re-generate all output files with identical environment and command line settings by simply running './update' from the script directory.</text:span></text:p> <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2566_1114405012"/><text:span text:style-name="T108">C</text:span><text:span text:style-name="T104">hanging the model job list</text:span><text:bookmark-end text:name="__RefHeading__2566_1114405012"/></text:h> - <text:p text:style-name="P44"><text:span text:style-name="T105">U</text:span><text:span text:style-name="T104">sually, the job list is defined in the model setup. The user may chose to add </text:span><text:span text:style-name="T110">jobs </text:span><text:span text:style-name="T104">and delete jobs from this list as appropriate. While adding a job is straightforward, removing a job uses a special section variable '.remove' (note the leading period). It </text:span><text:span text:style-name="T110">is</text:span><text:span text:style-name="T104"> defined in the [jobs] section and contains a list of the jobs to be suppressed.</text:span></text:p> - <text:p text:style-name="P125"><text:soft-page-break/># joe1234.config</text:p> + <text:p text:style-name="P44"><text:span text:style-name="T105">U</text:span><text:span text:style-name="T104">sually, the job list is defined in the model setup. The user may chose to add </text:span><text:span text:style-name="T110">jobs </text:span><text:span text:style-name="T104">and delete jobs from this list as appropriate. While adding a job is straightforward, </text:span><text:soft-page-break/><text:span text:style-name="T104">removing a job uses a special section variable '.remove' (note the leading period). It </text:span><text:span text:style-name="T110">is</text:span><text:span text:style-name="T104"> defined in the [jobs] section and contains a list of the jobs to be suppressed.</text:span></text:p> + <text:p text:style-name="P125"># joe1234.config</text:p> <text:p text:style-name="P125">EXP_TYPE = control</text:p> <text:p text:style-name="P125">[jobs]</text:p> <text:p text:style-name="P125"><text:s text:c="2"/>.remove = post, pre</text:p> @@ -2610,7 +2607,7 @@ <text:p text:style-name="P139"><text:span text:style-name="T104"><text:s text:c="4"/>.</text:span><text:span text:style-name="T108">extends</text:span><text:span text:style-name="T104"> = p</text:span><text:span text:style-name="T109">ost</text:span></text:p> <text:p text:style-name="P126"><text:s text:c="4"/>command = $HOME/bin/my_special_command</text:p> <text:p text:style-name="P50">With this configuration, an additional 'joe1234.my_post' is created based on the existing 'post' template. A dedicated 'joe1234.my_post.tmpl' file is not needed here. The 'command' setting is <text:span text:style-name="T176">made available </text:span>to <text:span text:style-name="T176">the template via the</text:span> 'JOB' dictionary.</text:p> - <text:h text:style-name="P257" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2568_1114405012"/>Pre-defined job variables<text:bookmark-end text:name="__RefHeading__2568_1114405012"/></text:h> + <text:h text:style-name="P258" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2568_1114405012"/>Pre-defined job variables<text:bookmark-end text:name="__RefHeading__2568_1114405012"/></text:h> <text:p text:style-name="P55">While <text:span text:style-name="T9">mkexp</text:span> in general does not impose any naming convention on the variable names used in the job sections and leaves the details to the respective model setup, there are a few exceptions.</text:p> <text:p text:style-name="P174">tasks</text:p> <text:p text:style-name="P196">The total number of parallel (MPI) tasks that will be started when running the model. If a job section does not define 'tasks', its value defaults to 'nodes' times 'tasks_per_node'. Some models require that 'tasks' may explicitly be set to some artificial value to trigger the testing mode.</text:p> @@ -2618,7 +2615,7 @@ <text:p text:style-name="P196">Number of computing nodes required on the computing system. Needed if 'tasks' is not set.</text:p> <text:p text:style-name="P175">tasks_per_node</text:p> <text:p text:style-name="P196">Number of parallel (MPI) tasks on a single node. Needed if 'tasks' is not set.</text:p> - <text:h text:style-name="P256" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2570_1114405012"/>Overriding namelist settings in derived jobs<text:bookmark-end text:name="__RefHeading__2570_1114405012"/></text:h> + <text:h text:style-name="P257" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2570_1114405012"/>Overriding namelist settings in derived jobs<text:bookmark-end text:name="__RefHeading__2570_1114405012"/></text:h> <text:p text:style-name="P50">There is special provision to change namelist files settings for a specific job. Consider this setting from the introductory example.</text:p> <text:p text:style-name="P140"><text:soft-page-break/>[namelists]</text:p> <text:p text:style-name="P100"><text:s text:c="2"/>[[namelist.jsbach]]</text:p> @@ -2633,7 +2630,7 @@ <text:p text:style-name="P100"><text:s text:c="8"/><text:span text:style-name="T175">[[</text:span>[[[jsbach_ctl]]]<text:span text:style-name="T175">]]</text:span></text:p> <text:p text:style-name="P100"><text:span text:style-name="T104"><text:s text:c="10"/>use_dynveg = </text:span><text:span text:style-name="T109">true</text:span></text:p> <text:p text:style-name="P46"><text:span text:style-name="T110">This</text:span><text:span text:style-name="T104"> will result in a 'joe1234.run_first' file that is identical to 'joe1234.run' except for the 'use_dynveg' setting.</text:span></text:p> - <text:h text:style-name="P256" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2572_1114405012"/>Native script variables<text:bookmark-end text:name="__RefHeading__2572_1114405012"/></text:h> + <text:h text:style-name="P257" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2572_1114405012"/>Native script variables<text:bookmark-end text:name="__RefHeading__2572_1114405012"/></text:h> <text:p text:style-name="P48"><text:span text:style-name="T104">While the definition of .config variables may use</text:span><text:span text:style-name="T111"> variable references like</text:span><text:span text:style-name="T104"> $NAME or ${NAME} to include the </text:span><text:span text:style-name="T111">verbatim </text:span><text:span text:style-name="T104">value of other .config variables, this may not always be what you want. If you want to create a job </text:span><text:span text:style-name="T111">script</text:span><text:span text:style-name="T104"> that is supposed to be 'user-serviceable' for certain applications, the users will not appreciate having to change the same value several times in the same script. </text:span><text:span text:style-name="T111">Instead they will want to have a single, native script variable that is used throughout the job script, and that may be re-defined on a single line.</text:span></text:p> <text:p text:style-name="P52">To allow this, <text:span text:style-name="T9">mkexp</text:span> locates all expressions like $${NAME} in the configuration values, and re-formats them to the syntax of the current job script:</text:p> <text:p text:style-name="P125"># joe1234.config</text:p> @@ -2662,7 +2659,7 @@ <text:p text:style-name="P143">#! /usr/bin/env python </text:p> <text:p text:style-name="P143">NAME = '<text:span text:style-name="T182">Joe User</text:span>' </text:p> <text:p text:style-name="P144">print<text:span text:style-name="T219">(</text:span>'<text:span text:style-name="T104">This experiment was generated by </text:span><text:span text:style-name="T113">' + str(</text:span><text:span text:style-name="T104">NAME) </text:span><text:span text:style-name="T113">+ '</text:span>'<text:span text:style-name="T219">)</text:span></text:p> - <text:h text:style-name="P263" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2574_1114405012"/>Initializing native script variables<text:bookmark-end text:name="__RefHeading__2574_1114405012"/></text:h> + <text:h text:style-name="P264" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2574_1114405012"/>Initializing native script variables<text:bookmark-end text:name="__RefHeading__2574_1114405012"/></text:h> <text:p text:style-name="P61">In the previous section, the native variables were initialized by an addition<text:span text:style-name="T186">al script line. While this is sufficient for a small number of variables, it may be difficult to maintain these initialization lines for a more complex setup with changing requirements.</text:span></text:p> <text:p text:style-name="P61"><text:span text:style-name="T187">To allow a self-maintaining variable list based on the current configuration, </text:span><text:span text:style-name="T20">mkexp</text:span><text:span text:style-name="T187"> maintains the special variable VARIABLES_. When generating output for</text:span></text:p> <text:p text:style-name="P132">NAME = Joe User</text:p> @@ -2692,7 +2689,7 @@ <text:p text:style-name="P13">For this, a standard environment, like a standard experiment, consists of a .config file and a corresponding template. The <text:span text:style-name="T9">environmentname</text:span>.config file contains settings like directory paths or a description of machine capacities for job control</text:p> <text:p text:style-name="P13">The actual job control headers needed to run a certain job step are saved as <text:span text:style-name="T9">environmentname</text:span>.tmpl. This template will be filled using configuration information from both experiment, options, and environment. <text:span text:style-name="T146">The resulting job header</text:span> is usually included at the beginning of the experiment's job script templates.</text:p> <text:p text:style-name="P9">An experiment configuration <text:span text:style-name="T188">may</text:span> <text:span text:style-name="T188">set</text:span> the special variable E<text:span text:style-name="T188">NVIRONMENT</text:span> to the name of <text:span text:style-name="T188">the host </text:span>e<text:span text:style-name="T188">nvironment</text:span> to use. <text:span text:style-name="T188">If it is not set, or empty, the 'DEFAULT' environment settings will be used.</text:span></text:p> - <text:h text:style-name="P274" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__1883_1672291846"/>Defining namelists and other configuration files<text:bookmark-end text:name="__RefHeading__1883_1672291846"/></text:h> + <text:h text:style-name="P275" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__1883_1672291846"/>Defining namelists and other configuration files<text:bookmark-end text:name="__RefHeading__1883_1672291846"/></text:h> <text:p text:style-name="P69"><text:span text:style-name="T70">Most models need at least one Fortran namelist file or another form of configuration file to run. </text:span><text:span text:style-name="T71">The special section [namelists] </text:span><text:span text:style-name="T70">is designed to </text:span><text:span text:style-name="T71">contain all information that goes into </text:span><text:span text:style-name="T70">these</text:span><text:span text:style-name="T71"> files. Each </text:span><text:span text:style-name="T68">immediate </text:span><text:span text:style-name="T71">subsection defines settings for a single file that will </text:span><text:span text:style-name="T70">by default be </text:span><text:span text:style-name="T71">formatted as a Fortran namelist. </text:span><text:span text:style-name="T70">For </text:span><text:span text:style-name="T71">example,</text:span></text:p> <text:p text:style-name="P146">[namelists]</text:p> <text:p text:style-name="P156"/> @@ -2704,7 +2701,7 @@ <text:p text:style-name="P148"><text:s text:c="6"/>out_expname = joe1234</text:p> <text:p text:style-name="P148"><text:s text:c="6"/><text:span text:style-name="T201">dt_stop = 2009, 1, 1, 0, 0, 0</text:span></text:p> <text:p text:style-name="P66"><text:span text:style-name="T48">defines </text:span><text:span text:style-name="T69">a single </text:span><text:span text:style-name="T48">namelist file, </text:span><text:span text:style-name="T72">'namelist.echam'</text:span><text:span text:style-name="T48">, </text:span><text:span text:style-name="T70">containing a single namelist group with four variables of different types. Note </text:span><text:span text:style-name="T89">that you do not </text:span><text:span text:style-name="T70">need to use quotes for strings nor periods for logical values.</text:span></text:p> - <text:h text:style-name="P259" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2578_1114405012"/>Formatting the namelist information<text:bookmark-end text:name="__RefHeading__2578_1114405012"/></text:h> + <text:h text:style-name="P260" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2578_1114405012"/>Formatting the namelist information<text:bookmark-end text:name="__RefHeading__2578_1114405012"/></text:h> <text:p text:style-name="P71"><text:span text:style-name="T68">The </text:span><text:span text:style-name="T69">names of the </text:span><text:span text:style-name="T68">subsections of each namelist file entry, i.e. the second level subsections under the immediate subsections of [namelists], are taken as namelist group </text:span><text:span text:style-name="T69">name</text:span><text:span text:style-name="T68">s, and their variables are formatted as fields of this namelist </text:span><text:span text:style-name="T69">group</text:span><text:span text:style-name="T68">. </text:span><text:span text:style-name="T69">In the example above, there is a single namelist group 'runctl', which will be converted to the Fortran namelist convention. </text:span><text:span text:style-name="T200">The values of the group's fields are checked to determine whether they are numerical, logical, or string values. Logical and string values will then be formatted using periods or quotes, respectively.</text:span></text:p> <text:p text:style-name="P71"><text:span text:style-name="T220">In the example above, the first four fields are single values of logical, integer, floating </text:span><text:soft-page-break/><text:span text:style-name="T220">point, and string type.</text:span><text:span text:style-name="T72"> The fifth is a list of integer values, that will be passed as such to the namelist file:</text:span></text:p> <text:p text:style-name="P115">&runctl</text:p> @@ -2714,11 +2711,11 @@ <text:p text:style-name="P149"><text:s text:c="4"/>out_expname = <text:span text:style-name="T139">'</text:span><text:span text:style-name="T133">joe1234</text:span><text:span text:style-name="T139">'</text:span></text:p> <text:p text:style-name="P149"><text:span text:style-name="T72"><text:s text:c="4"/>dt_stop = </text:span><text:span text:style-name="T128">2009, 1, 1, 0, 0, 0</text:span></text:p> <text:p text:style-name="P134">/</text:p> - <text:h text:style-name="P264" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2580_1114405012"/><text:span text:style-name="T70">S</text:span><text:span text:style-name="T48">uppressing namelist groups or variables</text:span><text:bookmark-end text:name="__RefHeading__2580_1114405012"/></text:h> + <text:h text:style-name="P265" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2580_1114405012"/><text:span text:style-name="T70">S</text:span><text:span text:style-name="T48">uppressing namelist groups or variables</text:span><text:bookmark-end text:name="__RefHeading__2580_1114405012"/></text:h> <text:p text:style-name="P56">Both the namelist file sections and the namelist group section honor the special variable '.remove' which may be set to a list of names. Any namelist groups listed in the file's '.remove' variable, and any variables listed in the group's '.remove' variable will be deleted from the namelist definition.</text:p> <text:p text:style-name="P56">The names may contain the usual file wildcards, '*' and '?' to remove a whole range of groups or variables.</text:p> <text:p text:style-name="P80"><text:span text:style-name="T48">While '.remove' is useful to </text:span><text:span text:style-name="T79">suppress</text:span><text:span text:style-name="T48"> default settings that must not be present for the experiment setup, currently there is no way to resurrect a removed setting in a later setup level. </text:span><text:span text:style-name="T80">Therefore, its use in model setups is strongly discouraged.</text:span></text:p> - <text:h text:style-name="P260" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2714_1114405012"/>Using the namelist text<text:bookmark-end text:name="__RefHeading__2714_1114405012"/></text:h> + <text:h text:style-name="P261" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2714_1114405012"/>Using the namelist text<text:bookmark-end text:name="__RefHeading__2714_1114405012"/></text:h> <text:p text:style-name="P67"><text:span text:style-name="T70">T</text:span><text:span text:style-name="T72">he </text:span><text:span text:style-name="T61">formatted namelist text </text:span><text:span text:style-name="T48">is </text:span><text:span text:style-name="T72">stor</text:span><text:span text:style-name="T48">ed </text:span><text:span text:style-name="T72">in</text:span><text:span text:style-name="T48"> a global variable </text:span><text:span text:style-name="T72">that may be used by a template placeholder</text:span><text:span text:style-name="T48">. </text:span><text:span text:style-name="T70">This way, </text:span><text:span text:style-name="T48">all job information </text:span><text:span text:style-name="T72">available </text:span><text:span text:style-name="T70">is written to</text:span><text:span text:style-name="T48"> a single script or description file, </text:span><text:span text:style-name="T70">and </text:span><text:span text:style-name="T48">native script variables </text:span><text:span text:style-name="T70">may be used</text:span><text:span text:style-name="T48"> in the namelist definitions.</text:span></text:p> <text:p text:style-name="P69"><text:span text:style-name="T61">The name of </text:span><text:span text:style-name="T72">this </text:span><text:span text:style-name="T61">variable</text:span><text:span text:style-name="T62"> </text:span><text:span text:style-name="T72">is</text:span><text:span text:style-name="T61"> generated from </text:span><text:span text:style-name="T72">its</text:span><text:span text:style-name="T61"> </text:span><text:span text:style-name="T62">respective</text:span><text:span text:style-name="T61"> file name, </text:span><text:span text:style-name="T72">like</text:span><text:span text:style-name="T61"> 'namelist.echam', by </text:span><text:span text:style-name="T71">converting all letters to upper case </text:span><text:span text:style-name="T61">(</text:span><text:span text:style-name="T71">namelist.echam →</text:span><text:span text:style-name="T61"> </text:span><text:span text:style-name="T71">NAMELIST.ECHAM</text:span><text:span text:style-name="T61">) </text:span><text:span text:style-name="T62">and </text:span><text:span text:style-name="T61">replacing non-word characters by an underscore (NAMELIST.ECHAM → NAMELIST_ECHAM).</text:span></text:p> <text:p text:style-name="Preformatted_20_Text"># joe1234.config</text:p> @@ -2741,7 +2738,7 @@ <text:p text:style-name="P105">EOF</text:p> <text:p text:style-name="P70"><text:span text:style-name="T72">Note how this setup uses the native script variable 'EXP_ID' to set the </text:span><text:span text:style-name="T68">namelist contents.</text:span></text:p> <text:p text:style-name="P70"><text:span text:style-name="T73">As in the example above, the script template is responsible for writing the namelist text to an actual file. </text:span><text:span text:style-name="T72">While in general the namelist file takes the same name as the .config subsection defining it, </text:span><text:span text:style-name="T25">mkexp</text:span><text:span text:style-name="T72"> </text:span><text:span text:style-name="T73">ha</text:span><text:span text:style-name="T72">s currently no way to enforce this. The template needs to be set up accordingly.</text:span></text:p> - <text:h text:style-name="P265" text:outline-level="3">Using native script variables in namelists</text:h> + <text:h text:style-name="P266" text:outline-level="3">Using native script variables in namelists</text:h> <text:p text:style-name="P88">When using native script variables in a namelist, it may be necessary to suppress the conversion of values to namelist conventions. Consider</text:p> <text:p text:style-name="P159">[namelists]</text:p> <text:p text:style-name="P159"><text:s text:c="2"/><text:span text:style-name="T225">[[namelist.echam]]</text:span></text:p> @@ -2754,7 +2751,7 @@ <text:p text:style-name="P88">When the text for NAMELIST_ECHAM is generated, <text:span text:style-name="T9">mkexp</text:span><text:span text:style-name="T48"> converts the value of 'dt_stop' to a string surrounded by single quotes (see 'EXP_ID' in the previous example), as '$$final_date' cannot be </text:span><text:span text:style-name="T95">recognized</text:span><text:span text:style-name="T48"> as a numer</text:span><text:span text:style-name="T95">ic</text:span><text:span text:style-name="T48"> or logical value. In the namelist context however it is </text:span><text:span text:style-name="T95">needed</text:span><text:span text:style-name="T48"> as a</text:span><text:span text:style-name="T95">n unquoted</text:span><text:span text:style-name="T48"> list of integers. </text:span><text:span text:style-name="T94">To fix this, simply use the special syntax 'raw(…)' </text:span><text:span text:style-name="T95">around the value:</text:span></text:p> <text:p text:style-name="Preformatted_20_Text"><text:span text:style-name="T95"><text:s text:c="6"/></text:span><text:span text:style-name="T93">dt_stop = </text:span><text:span text:style-name="T95">raw(</text:span><text:span text:style-name="T93">$$final_date</text:span><text:span text:style-name="T95">)</text:span></text:p> <text:p text:style-name="P57">which disables the conversion to a valid namelist value, leaving the correct formatting of the native variable to the script.</text:p> - <text:h text:style-name="P262" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2584_1114405012"/><text:soft-page-break/>Non-namelist configuration files<text:bookmark-end text:name="__RefHeading__2584_1114405012"/></text:h> + <text:h text:style-name="P263" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2584_1114405012"/><text:soft-page-break/>Non-namelist configuration files<text:bookmark-end text:name="__RefHeading__2584_1114405012"/></text:h> <text:p text:style-name="P81"><text:span text:style-name="T83">A [namelists] subsection may not only define a Fortran namelist file but also a custom format configuration file. </text:span><text:span text:style-name="T81">F</text:span><text:span text:style-name="T48">or any </text:span><text:span text:style-name="T83">of these</text:span><text:span text:style-name="T82"> files, the special section variable '.use_template' m</text:span><text:span text:style-name="T96">ay</text:span><text:span text:style-name="T82"> be set to 'true', </text:span><text:span text:style-name="T96">if </text:span><text:span text:style-name="T83">the model setup provid</text:span><text:span text:style-name="T96">es</text:span><text:span text:style-name="T83"> a template '</text:span><text:span text:style-name="T29">subsection</text:span><text:span text:style-name="T83">.tmpl', </text:span><text:span text:style-name="T96">or to an arbitrary template name, replacing </text:span><text:span text:style-name="T35">subsection,</text:span><text:span text:style-name="T96"> if a template is applicable to more than one section</text:span><text:span text:style-name="T83">. This template is expanded using the subsection's variables to create a suitably formatted text. </text:span><text:span text:style-name="T84">As for genuine namelists, the result is stored in a global variable.</text:span></text:p> <text:h text:style-name="Heading_20_2" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__2831_1132221942"/><text:span text:style-name="T84">D</text:span><text:span text:style-name="T48">efining input files for an experiment</text:span><text:bookmark-end text:name="__RefHeading__2831_1132221942"/></text:h> <text:p text:style-name="P85"><text:span text:style-name="T48">While the namelist files determine the model properties, the model state </text:span><text:span text:style-name="T92">also </text:span><text:span text:style-name="T48">depends on input files for initial and boundary conditions or assimilation data. These files are defined in the [files] special section.</text:span></text:p> @@ -2764,10 +2761,10 @@ <text:p text:style-name="List_20_Heading"><text:span text:style-name="T48">.</text:span><text:span text:style-name="T99">sub_dir</text:span></text:p> <text:p text:style-name="P219"><text:span text:style-name="T100">file names are taken to be relative to this subdirectory of </text:span><text:span text:style-name="T48">'.base_dir'</text:span></text:p> <text:p text:style-name="P63"><text:span text:style-name="T120">For expanding the resulting file path</text:span><text:span text:style-name="T104">, </text:span><text:span text:style-name="T40">mkexp</text:span><text:span text:style-name="T104"> provides </text:span><text:span text:style-name="T120">a global function:</text:span></text:p> - <text:p text:style-name="P233"><text:span text:style-name="T104">get_file</text:span><text:span text:style-name="T125">(</text:span><text:span text:style-name="T42">section</text:span><text:span text:style-name="T125">, </text:span><text:span text:style-name="T42">name</text:span><text:span text:style-name="T125">)</text:span></text:p> + <text:p text:style-name="P234"><text:span text:style-name="T104">get_file</text:span><text:span text:style-name="T125">(</text:span><text:span text:style-name="T42">section</text:span><text:span text:style-name="T125">, </text:span><text:span text:style-name="T42">name</text:span><text:span text:style-name="T125">)</text:span></text:p> <text:p text:style-name="P197">returns the full path for file <text:span text:style-name="T9">name</text:span> as given in the <text:span text:style-name="T9">section</text:span> object. Note that <text:span text:style-name="T9">section</text:span> is given as object reference, but <text:span text:style-name="T9">name</text:span> is given as a string. <text:span text:style-name="T245">All native script variables are expanded</text:span></text:p> <text:p text:style-name="P85"><text:span text:style-name="T99">Other than that, t</text:span><text:span text:style-name="T92">here are no restrictions on the content structure of this section, and the job script templates are responsible for converting this content into a suitable script text.</text:span></text:p> - <text:h text:style-name="P258" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2833_1132221942"/>Overriding <text:span text:style-name="T223">input file</text:span>s <text:span text:style-name="T223">for certain</text:span> jobs<text:bookmark-end text:name="__RefHeading__2833_1132221942"/></text:h> + <text:h text:style-name="P259" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2833_1132221942"/>Overriding <text:span text:style-name="T223">input file</text:span>s <text:span text:style-name="T223">for certain</text:span> jobs<text:bookmark-end text:name="__RefHeading__2833_1132221942"/></text:h> <text:p text:style-name="P51"><text:span text:style-name="T224">As for namelists, t</text:span>here is special provision to change <text:span text:style-name="T223">the [</text:span>files<text:span text:style-name="T223">]</text:span> settings for a specific job. <text:span text:style-name="T223">Let us assume</text:span> <text:span text:style-name="T223">that a model run continues a previous run and reads that run's state from a restart file that may be defined like this:</text:span></text:p> <text:p text:style-name="P141"><text:soft-page-break/>[<text:span text:style-name="T223">files</text:span>]</text:p> <text:p text:style-name="P101"><text:s text:c="2"/>[[<text:span text:style-name="T223">echam</text:span>]]</text:p> diff --git a/doc/mkexp.pdf b/doc/mkexp.pdf index 2610544e7adcee8c33505c788198f6f54e9346c0..656d1612818e753750bbbca4fdcf4f5ea27e7a1a 100644 GIT binary patch delta 22120 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 delta 22124 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 RO-zz7=s2;Vq16JZ_#eXE$NvBT diff --git a/package_info.py b/package_info.py index 5c173d9..4265ece 100644 --- a/package_info.py +++ b/package_info.py @@ -4,4 +4,4 @@ Information on package name and version full_name = 'Make Experiments!' name = 'mkexp' -version = '1.0.1dev' +version = '1.0.1' -- GitLab