From c1bba6315ce8e01d07a618ad6a69f1b3632c645b Mon Sep 17 00:00:00 2001 From: Karl-Hermann Wieners <karl-hermann.wieners@mpimet.mpg.de> Date: Thu, 27 Jun 2019 08:17:26 +0000 Subject: [PATCH] mkexp: added 'getconfig' tool to generate clean config files from 'update' scripts --- CHANGES.txt | 5 + doc/mkexp.fodt | 771 +++++++++++++++++++++++++------------------------ doc/mkexp.pdf | Bin 169721 -> 170775 bytes expargparse.py | 60 ++++ getconfig | 71 +++++ mkexp | 47 +-- test.py | 8 + 7 files changed, 545 insertions(+), 417 deletions(-) create mode 100644 expargparse.py create mode 100755 getconfig diff --git a/CHANGES.txt b/CHANGES.txt index 6c01c25..be40be0 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -9,6 +9,11 @@ Release Changes Release 1.0.5 ============= +Global +------ + +* Added 'getconfig' tool to generate clean config files from 'update' scripts + Templates --------- diff --git a/doc/mkexp.fodt b/doc/mkexp.fodt index 133d5ba..fd90d0c 100644 --- a/doc/mkexp.fodt +++ b/doc/mkexp.fodt @@ -1,28 +1,28 @@ <?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>P12DT2H35M18S</meta:editing-duration><meta:editing-cycles>151</meta:editing-cycles><meta:generator>LibreOffice/6.0.7.3$Linux_X86_64 LibreOffice_project/00m0$Build-3</meta:generator><meta:initial-creator>Karl-Hermann Wieners</meta:initial-creator><dc:date>2019-06-05T14:03:22.375912651</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="30" meta:paragraph-count="568" meta:word-count="7847" meta:character-count="49969" meta:non-whitespace-character-count="42293"/><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>P12DT2H44M15S</meta:editing-duration><meta:editing-cycles>152</meta:editing-cycles><meta:generator>LibreOffice/6.0.7.3$Linux_X86_64 LibreOffice_project/00m0$Build-3</meta:generator><meta:initial-creator>Karl-Hermann Wieners</meta:initial-creator><dc:date>2019-06-27T10:15:10.229441497</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="30" meta:paragraph-count="570" meta:word-count="7883" meta:character-count="50220" meta:non-whitespace-character-count="42510"/><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">0</config:config-item> + <config:config-item config:name="ViewAreaTop" config:type="long">264760</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">34585</config:config-item> - <config:config-item config:name="ViewAreaHeight" config:type="long">31044</config:config-item> + <config:config-item config:name="ViewAreaWidth" config:type="long">29912</config:config-item> + <config:config-item config:name="ViewAreaHeight" config:type="long">30720</config:config-item> <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item> <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item> <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">19719</config:config-item> - <config:config-item config:name="ViewTop" config:type="long">15591</config:config-item> + <config:config-item config:name="ViewLeft" config:type="long">18159</config:config-item> + <config:config-item config:name="ViewTop" config:type="long">275218</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">0</config:config-item> - <config:config-item config:name="VisibleRight" config:type="long">34583</config:config-item> - <config:config-item config:name="VisibleBottom" config:type="long">31043</config:config-item> + <config:config-item config:name="VisibleTop" config:type="long">264760</config:config-item> + <config:config-item config:name="VisibleRight" config:type="long">29910</config:config-item> + <config:config-item config:name="VisibleBottom" config:type="long">295478</config:config-item> <config:config-item config:name="ZoomType" config:type="short">2</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> - <config:config-item config:name="ZoomFactor" config:type="short">71</config:config-item> + <config:config-item config:name="ZoomFactor" config:type="short">82</config:config-item> <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item> <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item> </config:config-item-map-entry> @@ -41,7 +41,7 @@ <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item> <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item> <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item> - <config:config-item config:name="PrinterSetup" config:type="base64Binary">swH+/0hQLU9mZmljZWpldC00NjIwLXNlcmllcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ1VQUzpIUC1PZmZpY2VqZXQtNDYyMC1zZXJpZXMAAAAWAAMA0AAAAAAAAAAIAFZUAAAkbQAASm9iRGF0YSAxCnByaW50ZXI9SFAtT2ZmaWNlamV0LTQ2MjAtc2VyaWVzCm9yaWVudGF0aW9uPVBvcnRyYWl0CmNvcGllcz0xCmNvbGxhdGU9ZmFsc2UKbWFyZ2luZGFqdXN0bWVudD0wLDAsMCwwCmNvbG9yZGVwdGg9MjQKcHNsZXZlbD0wCnBkZmRldmljZT0xCmNvbG9yZGV2aWNlPTAKUFBEQ29udGV4RGF0YQpQYWdlU2l6ZTpMZXR0ZXIASW5wdXRTbG90OkF1dG8AABIAQ09NUEFUX0RVUExFWF9NT0RFEwBEdXBsZXhNb2RlOjpVbmtub3du</config:config-item> + <config:config-item config:name="PrinterSetup" config:type="base64Binary">swH+/0hQLU9mZmljZWpldC00NjIwLXNlcmllcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ1VQUzpIUC1PZmZpY2VqZXQtNDYyMC1zZXJpZXMAAAAWAAMA0AAAAAAAAAAIAFZUAAAkbQAASm9iRGF0YSAxCnByaW50ZXI9SFAtT2ZmaWNlamV0LTQ2MjAtc2VyaWVzCm9yaWVudGF0aW9uPVBvcnRyYWl0CmNvcGllcz0xCmNvbGxhdGU9ZmFsc2UKbWFyZ2luZGFqdXN0bWVudD0wLDAsMCwwCmNvbG9yZGVwdGg9MjQKcHNsZXZlbD0wCnBkZmRldmljZT0xCmNvbG9yZGV2aWNlPTAKUFBEQ29udGV4RGF0YQpJbnB1dFNsb3Q6QXV0bwBQYWdlU2l6ZTpMZXR0ZXIAABIAQ09NUEFUX0RVUExFWF9NT0RFEwBEdXBsZXhNb2RlOjpVbmtub3du</config:config-item> <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item> <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/> <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item> @@ -92,7 +92,7 @@ <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item> <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item> <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item> - <config:config-item config:name="Rsid" config:type="int">16634059</config:config-item> + <config:config-item config:name="Rsid" config:type="int">16673490</config:config-item> <config:config-item config:name="MathBaselineAlignment" config:type="boolean">true</config:config-item> <config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item> <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item> @@ -1342,6 +1342,21 @@ <style:style style:name="P308" 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="P309" style:family="paragraph" style:parent-style-name="List_20_Contents"> + <style:text-properties officeooo:paragraph-rsid="00fe6ad2"/> + </style:style> + <style:style style:name="P310" style:family="paragraph" style:parent-style-name="List_20_Contents"> + <style:text-properties officeooo:paragraph-rsid="00f02006"/> + </style:style> + <style:style style:name="P311" style:family="paragraph" style:parent-style-name="List_20_Contents"> + <style:text-properties officeooo:rsid="00fe6ad2" officeooo:paragraph-rsid="00fe6ad2"/> + </style:style> + <style:style style:name="P312" 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="P313" style:family="paragraph" style:parent-style-name="Preformatted_20_List_20_Heading"> + <style:text-properties officeooo:paragraph-rsid="00fe6ad2"/> + </style:style> <style:style style:name="T1" style:family="text"> <style:text-properties officeooo:rsid="000be205"/> </style:style> @@ -1670,476 +1685,482 @@ <style:text-properties fo:font-style="normal" officeooo:rsid="008e53fe" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T110" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" style:font-style-asian="normal" style:font-style-complex="normal"/> + <style:text-properties fo:font-style="normal" officeooo:rsid="00f02006" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T111" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="004fd5cd" style:font-style-asian="normal" style:font-style-complex="normal"/> + <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="T112" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="0051a8b5" style:font-style-asian="normal" style:font-style-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="004fd5cd" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T113" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="0053695f" style:font-style-asian="normal" style:font-style-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="0051a8b5" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T114" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00551136" style:font-style-asian="normal" style:font-style-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="0053695f" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T115" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="0056317a" style:font-style-asian="normal" style:font-style-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00551136" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T116" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="0056fcb8" style:font-style-asian="normal" style:font-style-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="0056317a" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T117" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00584c1a" style:font-style-asian="normal" style:font-style-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="0056fcb8" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T118" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="005a017d" style:font-style-asian="normal" style:font-style-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00584c1a" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T119" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="005ac4c7" style:font-style-asian="normal" style:font-style-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="005a017d" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T120" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00615b4d" style:font-style-asian="normal" style:font-style-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="005ac4c7" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T121" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00657146" style:font-style-asian="normal" style:font-style-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00615b4d" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T122" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="006727cc" style:font-style-asian="normal" style:font-style-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00657146" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T123" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00c0dbdb" style:font-style-asian="normal" style:font-style-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="006727cc" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T124" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00c2926f" style:font-style-asian="normal" style:font-style-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00c0dbdb" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T125" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00c2ee8b" style:font-style-asian="normal" style:font-style-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00c2926f" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T126" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00e1d614" style:font-style-asian="normal" style:font-style-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00c2ee8b" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T127" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" fo:font-weight="bold" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-style-complex="normal" style:font-weight-complex="bold"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00e1d614" style:font-style-asian="normal" style:font-style-complex="normal"/> </style:style> <style:style style:name="T128" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" fo:font-weight="bold" officeooo:rsid="00657146" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-style-complex="normal" style:font-weight-complex="bold"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" fo:font-weight="bold" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-style-complex="normal" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T129" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" fo:font-weight="bold" officeooo:rsid="00c2ee8b" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-style-complex="normal" style:font-weight-complex="bold"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" fo:font-weight="bold" officeooo:rsid="00657146" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-style-complex="normal" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T130" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" fo:font-weight="bold" officeooo:rsid="00c2926f" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-style-complex="normal" style:font-weight-complex="bold"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" fo:font-weight="bold" officeooo:rsid="00c2ee8b" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-style-complex="normal" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T131" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" fo:font-weight="normal" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-style-complex="normal" style:font-weight-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" fo:font-weight="bold" officeooo:rsid="00c2926f" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-style-complex="normal" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T132" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="none" fo:font-weight="normal" officeooo:rsid="00657146" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-style-complex="normal" style:font-weight-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" fo:font-weight="normal" 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="T133" style:family="text"> - <style:text-properties fo:font-style="normal" fo:font-weight="bold" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-style-complex="normal" style:font-weight-complex="bold"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="none" fo:font-weight="normal" officeooo:rsid="00657146" 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="T134" style:family="text"> - <style:text-properties fo:font-style="normal" fo:font-weight="bold" officeooo:rsid="00881a06" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-style-complex="normal" style:font-weight-complex="bold"/> + <style:text-properties fo:font-style="normal" fo:font-weight="bold" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-style-complex="normal" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T135" style:family="text"> - <style:text-properties fo:font-style="normal" fo:font-weight="bold" officeooo:rsid="0090e55e" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-style-complex="normal" style:font-weight-complex="bold"/> + <style:text-properties fo:font-style="normal" fo:font-weight="bold" officeooo:rsid="00881a06" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-style-complex="normal" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T136" style:family="text"> - <style:text-properties fo:font-style="normal" fo:font-weight="normal" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-style-complex="normal" style:font-weight-complex="normal"/> + <style:text-properties fo:font-style="normal" fo:font-weight="bold" officeooo:rsid="0090e55e" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-style-complex="normal" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T137" style:family="text"> - <style:text-properties fo:font-style="normal" fo:font-weight="normal" officeooo:rsid="00cba5e3" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-style-complex="normal" style:font-weight-complex="normal"/> + <style:text-properties fo:font-style="normal" fo:font-weight="normal" 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="T138" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" fo:font-weight="bold" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-style-complex="normal" style:font-weight-complex="bold"/> + <style:text-properties fo:font-style="normal" fo:font-weight="normal" officeooo:rsid="00cba5e3" 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="T139" style:family="text"> - <style:text-properties fo:font-style="normal" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" fo:font-weight="normal" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-style-complex="normal" style:font-weight-complex="normal"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" fo:font-weight="bold" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-style-complex="normal" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T140" style:family="text"> - <style:text-properties officeooo:rsid="001c98f3"/> + <style:text-properties fo:font-style="normal" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" fo:font-weight="normal" 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="T141" style:family="text"> - <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:text-properties officeooo:rsid="001c98f3"/> </style:style> <style:style style:name="T142" style:family="text"> - <style:text-properties fo:font-weight="bold" officeooo:rsid="00145993" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T143" style:family="text"> - <style:text-properties fo:font-weight="bold" officeooo:rsid="00136724" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:text-properties fo:font-weight="bold" officeooo:rsid="00145993" style:font-weight-asian="bold" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T144" style:family="text"> - <style:text-properties fo:font-weight="bold" officeooo:rsid="003b8120" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:text-properties fo:font-weight="bold" officeooo:rsid="00136724" style:font-weight-asian="bold" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T145" style:family="text"> - <style:text-properties fo:font-weight="bold" officeooo:rsid="003ee797" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:text-properties fo:font-weight="bold" officeooo:rsid="003b8120" style:font-weight-asian="bold" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T146" style:family="text"> - <style:text-properties fo:font-weight="bold" officeooo:rsid="00840f80" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:text-properties fo:font-weight="bold" officeooo:rsid="003ee797" style:font-weight-asian="bold" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T147" style:family="text"> - <style:text-properties fo:font-weight="bold" officeooo:rsid="00881a06" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:text-properties fo:font-weight="bold" officeooo:rsid="00840f80" style:font-weight-asian="bold" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T148" style:family="text"> - <style:text-properties fo:font-weight="bold" officeooo:rsid="008a0101" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:text-properties fo:font-weight="bold" officeooo:rsid="00881a06" style:font-weight-asian="bold" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T149" style:family="text"> - <style:text-properties fo:font-weight="bold" officeooo:rsid="00c0dbdb" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:text-properties fo:font-weight="bold" officeooo:rsid="008a0101" style:font-weight-asian="bold" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T150" style:family="text"> - <style:text-properties fo:font-weight="bold" officeooo:rsid="00c2ee8b" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:text-properties fo:font-weight="bold" officeooo:rsid="00c0dbdb" style:font-weight-asian="bold" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T151" style:family="text"> - <style:text-properties fo:font-weight="bold" officeooo:rsid="00cfb468" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:text-properties fo:font-weight="bold" officeooo:rsid="00c2ee8b" style:font-weight-asian="bold" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T152" style:family="text"> - <style:text-properties officeooo:rsid="0022e63d"/> + <style:text-properties fo:font-weight="bold" officeooo:rsid="00cfb468" style:font-weight-asian="bold" style:font-weight-complex="bold"/> </style:style> <style:style style:name="T153" style:family="text"> - <style:text-properties officeooo:rsid="00237330"/> + <style:text-properties officeooo:rsid="0022e63d"/> </style:style> <style:style style:name="T154" style:family="text"> - <style:text-properties officeooo:rsid="00288fc1"/> + <style:text-properties officeooo:rsid="00237330"/> </style:style> <style:style style:name="T155" style:family="text"> - <style:text-properties officeooo:rsid="00292fe5"/> + <style:text-properties officeooo:rsid="00288fc1"/> </style:style> <style:style style:name="T156" style:family="text"> - <style:text-properties officeooo:rsid="002a37cf"/> + <style:text-properties officeooo:rsid="00292fe5"/> </style:style> <style:style style:name="T157" style:family="text"> - <style:text-properties officeooo:rsid="002ba7b2"/> + <style:text-properties officeooo:rsid="002a37cf"/> </style:style> <style:style style:name="T158" style:family="text"> - <style:text-properties officeooo:rsid="002df45a"/> + <style:text-properties officeooo:rsid="002ba7b2"/> </style:style> <style:style style:name="T159" style:family="text"> - <style:text-properties officeooo:rsid="002f6125"/> + <style:text-properties officeooo:rsid="002df45a"/> </style:style> <style:style style:name="T160" style:family="text"> - <style:text-properties officeooo:rsid="0031081b"/> + <style:text-properties officeooo:rsid="002f6125"/> </style:style> <style:style style:name="T161" style:family="text"> - <style:text-properties officeooo:rsid="003212b8"/> + <style:text-properties officeooo:rsid="0031081b"/> </style:style> <style:style style:name="T162" style:family="text"> - <style:text-properties officeooo:rsid="003317d4"/> + <style:text-properties officeooo:rsid="003212b8"/> </style:style> <style:style style:name="T163" style:family="text"> - <style:text-properties officeooo:rsid="0034e855"/> + <style:text-properties officeooo:rsid="003317d4"/> </style:style> <style:style style:name="T164" style:family="text"> - <style:text-properties officeooo:rsid="0035341c"/> + <style:text-properties officeooo:rsid="0034e855"/> </style:style> <style:style style:name="T165" style:family="text"> - <style:text-properties officeooo:rsid="003740c5"/> + <style:text-properties officeooo:rsid="0035341c"/> </style:style> <style:style style:name="T166" style:family="text"> - <style:text-properties officeooo:rsid="0038d36e"/> + <style:text-properties officeooo:rsid="003740c5"/> </style:style> <style:style style:name="T167" style:family="text"> - <style:text-properties officeooo:rsid="003a5594"/> + <style:text-properties officeooo:rsid="0038d36e"/> </style:style> <style:style style:name="T168" style:family="text"> - <style:text-properties officeooo:rsid="003b8120"/> + <style:text-properties officeooo:rsid="003a5594"/> </style:style> <style:style style:name="T169" style:family="text"> - <style:text-properties officeooo:rsid="003d6783"/> + <style:text-properties officeooo:rsid="003b8120"/> </style:style> <style:style style:name="T170" style:family="text"> - <style:text-properties officeooo:rsid="003ee797"/> + <style:text-properties officeooo:rsid="003d6783"/> </style:style> <style:style style:name="T171" style:family="text"> - <style:text-properties fo:font-weight="normal" style:font-weight-asian="normal" style:font-weight-complex="normal"/> + <style:text-properties officeooo:rsid="003ee797"/> </style:style> <style:style style:name="T172" style:family="text"> - <style:text-properties fo:font-weight="normal" officeooo:rsid="00405b5f" style:font-weight-asian="normal" style:font-weight-complex="normal"/> + <style:text-properties fo:font-weight="normal" style:font-weight-asian="normal" style:font-weight-complex="normal"/> </style:style> <style:style style:name="T173" style:family="text"> - <style:text-properties fo:font-weight="normal" officeooo:rsid="00cfb468" style:font-weight-asian="normal" style:font-weight-complex="normal"/> + <style:text-properties fo:font-weight="normal" officeooo:rsid="00405b5f" style:font-weight-asian="normal" style:font-weight-complex="normal"/> </style:style> <style:style style:name="T174" style:family="text"> - <style:text-properties fo:font-weight="normal" officeooo:rsid="00d08d3b" style:font-weight-asian="normal" style:font-weight-complex="normal"/> + <style:text-properties fo:font-weight="normal" officeooo:rsid="00cfb468" style:font-weight-asian="normal" style:font-weight-complex="normal"/> </style:style> <style:style style:name="T175" style:family="text"> - <style:text-properties officeooo:rsid="0040993d"/> + <style:text-properties fo:font-weight="normal" officeooo:rsid="00d08d3b" style:font-weight-asian="normal" style:font-weight-complex="normal"/> </style:style> <style:style style:name="T176" style:family="text"> - <style:text-properties officeooo:rsid="004133c6"/> + <style:text-properties officeooo:rsid="0040993d"/> </style:style> <style:style style:name="T177" style:family="text"> - <style:text-properties officeooo:rsid="00436ab9"/> + <style:text-properties officeooo:rsid="004133c6"/> </style:style> <style:style style:name="T178" style:family="text"> - <style:text-properties officeooo:rsid="00484f3f"/> + <style:text-properties officeooo:rsid="00436ab9"/> </style:style> <style:style style:name="T179" style:family="text"> - <style:text-properties officeooo:rsid="004a6d15"/> + <style:text-properties officeooo:rsid="00484f3f"/> </style:style> <style:style style:name="T180" style:family="text"> - <style:text-properties officeooo:rsid="004ba389"/> + <style:text-properties officeooo:rsid="004a6d15"/> </style:style> <style:style style:name="T181" style:family="text"> - <style:text-properties officeooo:rsid="004fd5cd"/> + <style:text-properties officeooo:rsid="004ba389"/> </style:style> <style:style style:name="T182" style:family="text"> - <style:text-properties officeooo:rsid="0053695f"/> + <style:text-properties officeooo:rsid="004fd5cd"/> </style:style> <style:style style:name="T183" style:family="text"> - <style:text-properties officeooo:rsid="0056317a"/> + <style:text-properties officeooo:rsid="0053695f"/> </style:style> <style:style style:name="T184" style:family="text"> - <style:text-properties officeooo:rsid="005a017d"/> + <style:text-properties officeooo:rsid="0056317a"/> </style:style> <style:style style:name="T185" style:family="text"> - <style:text-properties officeooo:rsid="005a5c62"/> + <style:text-properties officeooo:rsid="005a017d"/> </style:style> <style:style style:name="T186" style:family="text"> - <style:text-properties officeooo:rsid="005ac4c7"/> + <style:text-properties officeooo:rsid="005a5c62"/> </style:style> <style:style style:name="T187" style:family="text"> - <style:text-properties style:font-name="Liberation Mono" style:font-name-asian="Droid Sans Fallback1" style:font-name-complex="Liberation Mono"/> + <style:text-properties officeooo:rsid="005ac4c7"/> </style:style> <style:style style:name="T188" style:family="text"> - <style:text-properties style:font-name="Liberation Mono" officeooo:rsid="005ac4c7" style:font-name-asian="Droid Sans Fallback1" style:font-name-complex="Liberation Mono"/> + <style:text-properties style:font-name="Liberation Mono" style:font-name-asian="Droid Sans Fallback1" style:font-name-complex="Liberation Mono"/> </style:style> <style:style style:name="T189" style:family="text"> - <style:text-properties style:font-name="Liberation Mono" fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00657146" style:font-name-asian="Droid Sans Fallback1" style:font-style-asian="normal" style:font-name-complex="Liberation Mono" style:font-style-complex="normal"/> + <style:text-properties style:font-name="Liberation Mono" officeooo:rsid="005ac4c7" style:font-name-asian="Droid Sans Fallback1" style:font-name-complex="Liberation Mono"/> </style:style> <style:style style:name="T190" style:family="text"> - <style:text-properties officeooo:rsid="005b6c85"/> + <style:text-properties style:font-name="Liberation Mono" fo:font-style="normal" style:text-underline-style="none" officeooo:rsid="00657146" style:font-name-asian="Droid Sans Fallback1" style:font-style-asian="normal" style:font-name-complex="Liberation Mono" style:font-style-complex="normal"/> </style:style> <style:style style:name="T191" style:family="text"> - <style:text-properties officeooo:rsid="005ca831"/> + <style:text-properties officeooo:rsid="005b6c85"/> </style:style> <style:style style:name="T192" style:family="text"> - <style:text-properties officeooo:rsid="005fe3dc"/> + <style:text-properties officeooo:rsid="005ca831"/> </style:style> <style:style style:name="T193" style:family="text"> - <style:text-properties officeooo:rsid="0063d022"/> + <style:text-properties officeooo:rsid="005fe3dc"/> </style:style> <style:style style:name="T194" style:family="text"> - <style:text-properties officeooo:rsid="00657146"/> + <style:text-properties officeooo:rsid="0063d022"/> </style:style> <style:style style:name="T195" style:family="text"> - <style:text-properties officeooo:rsid="006727cc"/> + <style:text-properties officeooo:rsid="00657146"/> </style:style> <style:style style:name="T196" style:family="text"> - <style:text-properties officeooo:rsid="00674a3d"/> + <style:text-properties officeooo:rsid="006727cc"/> </style:style> <style:style style:name="T197" style:family="text"> - <style:text-properties officeooo:rsid="006c5326"/> + <style:text-properties officeooo:rsid="00674a3d"/> </style:style> <style:style style:name="T198" style:family="text"> - <style:text-properties officeooo:rsid="0074d148"/> + <style:text-properties officeooo:rsid="006c5326"/> </style:style> <style:style style:name="T199" style:family="text"> - <style:text-properties officeooo:rsid="00750ebf"/> + <style:text-properties officeooo:rsid="0074d148"/> </style:style> <style:style style:name="T200" style:family="text"> - <style:text-properties officeooo:rsid="0076c7e1"/> + <style:text-properties officeooo:rsid="00750ebf"/> </style:style> <style:style style:name="T201" style:family="text"> - <style:text-properties officeooo:rsid="00779a5b"/> + <style:text-properties officeooo:rsid="0076c7e1"/> </style:style> <style:style style:name="T202" style:family="text"> - <style:text-properties officeooo:rsid="00784d65"/> + <style:text-properties officeooo:rsid="00779a5b"/> </style:style> <style:style style:name="T203" style:family="text"> - <style:text-properties officeooo:rsid="007a1e4b"/> + <style:text-properties officeooo:rsid="00784d65"/> </style:style> <style:style style:name="T204" style:family="text"> - <style:text-properties officeooo:rsid="007bf983"/> + <style:text-properties officeooo:rsid="007a1e4b"/> </style:style> <style:style style:name="T205" style:family="text"> - <style:text-properties officeooo:rsid="007cef11"/> + <style:text-properties officeooo:rsid="007bf983"/> </style:style> <style:style style:name="T206" style:family="text"> - <style:text-properties officeooo:rsid="007d8dea"/> + <style:text-properties officeooo:rsid="007cef11"/> </style:style> <style:style style:name="T207" style:family="text"> - <style:text-properties officeooo:rsid="0081d76e"/> + <style:text-properties officeooo:rsid="007d8dea"/> </style:style> <style:style style:name="T208" style:family="text"> - <style:text-properties officeooo:rsid="00840f80"/> + <style:text-properties officeooo:rsid="0081d76e"/> </style:style> <style:style style:name="T209" style:family="text"> - <style:text-properties officeooo:rsid="00881a06"/> + <style:text-properties officeooo:rsid="00840f80"/> </style:style> <style:style style:name="T210" style:family="text"> - <style:text-properties officeooo:rsid="00895410"/> + <style:text-properties officeooo:rsid="00881a06"/> </style:style> <style:style style:name="T211" style:family="text"> - <style:text-properties officeooo:rsid="0089d9b6"/> + <style:text-properties officeooo:rsid="00895410"/> </style:style> <style:style style:name="T212" style:family="text"> - <style:text-properties officeooo:rsid="008a0101"/> + <style:text-properties officeooo:rsid="0089d9b6"/> </style:style> <style:style style:name="T213" style:family="text"> - <style:text-properties officeooo:rsid="008b134d"/> + <style:text-properties officeooo:rsid="008a0101"/> </style:style> <style:style style:name="T214" style:family="text"> - <style:text-properties officeooo:rsid="008c2cba"/> + <style:text-properties officeooo:rsid="008b134d"/> </style:style> <style:style style:name="T215" style:family="text"> - <style:text-properties officeooo:rsid="008e53fe"/> + <style:text-properties officeooo:rsid="008c2cba"/> </style:style> <style:style style:name="T216" style:family="text"> - <style:text-properties officeooo:rsid="00925c69"/> + <style:text-properties officeooo:rsid="008e53fe"/> </style:style> <style:style style:name="T217" style:family="text"> - <style:text-properties officeooo:rsid="00931d47"/> + <style:text-properties officeooo:rsid="00925c69"/> </style:style> <style:style style:name="T218" style:family="text"> - <style:text-properties officeooo:rsid="009eea28"/> + <style:text-properties officeooo:rsid="00931d47"/> </style:style> <style:style style:name="T219" style:family="text"> - <style:text-properties officeooo:rsid="00a5071e"/> + <style:text-properties officeooo:rsid="009eea28"/> </style:style> <style:style style:name="T220" style:family="text"> - <style:text-properties officeooo:rsid="00a52bc9"/> + <style:text-properties officeooo:rsid="00a5071e"/> </style:style> <style:style style:name="T221" style:family="text"> - <style:text-properties officeooo:rsid="00a5c0e1"/> + <style:text-properties officeooo:rsid="00a52bc9"/> </style:style> <style:style style:name="T222" style:family="text"> - <style:text-properties officeooo:rsid="00a76dd9"/> + <style:text-properties officeooo:rsid="00a5c0e1"/> </style:style> <style:style style:name="T223" style:family="text"> - <style:text-properties officeooo:rsid="00ac280f"/> + <style:text-properties officeooo:rsid="00a76dd9"/> </style:style> <style:style style:name="T224" style:family="text"> - <style:text-properties officeooo:rsid="00adbd1f"/> + <style:text-properties officeooo:rsid="00ac280f"/> </style:style> <style:style style:name="T225" style:family="text"> - <style:text-properties officeooo:rsid="00af8ed3"/> + <style:text-properties officeooo:rsid="00adbd1f"/> </style:style> <style:style style:name="T226" style:family="text"> - <style:text-properties officeooo:rsid="00b09ff8"/> + <style:text-properties officeooo:rsid="00af8ed3"/> </style:style> <style:style style:name="T227" style:family="text"> - <style:text-properties officeooo:rsid="00b59632"/> + <style:text-properties officeooo:rsid="00b09ff8"/> </style:style> <style:style style:name="T228" style:family="text"> - <style:text-properties officeooo:rsid="00b9be3b"/> + <style:text-properties officeooo:rsid="00b59632"/> </style:style> <style:style style:name="T229" style:family="text"> - <style:text-properties officeooo:rsid="00bb4800"/> + <style:text-properties officeooo:rsid="00b9be3b"/> </style:style> <style:style style:name="T230" style:family="text"> - <style:text-properties officeooo:rsid="00beeeb9"/> + <style:text-properties officeooo:rsid="00bb4800"/> </style:style> <style:style style:name="T231" style:family="text"> - <style:text-properties officeooo:rsid="00c2926f"/> + <style:text-properties officeooo:rsid="00beeeb9"/> </style:style> <style:style style:name="T232" style:family="text"> - <style:text-properties officeooo:rsid="00c2ee8b"/> + <style:text-properties officeooo:rsid="00c2926f"/> </style:style> <style:style style:name="T233" style:family="text"> - <style:text-properties officeooo:rsid="00c6886f"/> + <style:text-properties officeooo:rsid="00c2ee8b"/> </style:style> <style:style style:name="T234" style:family="text"> - <style:text-properties officeooo:rsid="00c870a0"/> + <style:text-properties officeooo:rsid="00c6886f"/> </style:style> <style:style style:name="T235" style:family="text"> - <style:text-properties officeooo:rsid="00c9174a"/> + <style:text-properties officeooo:rsid="00c870a0"/> </style:style> <style:style style:name="T236" style:family="text"> - <style:text-properties officeooo:rsid="00ca2923"/> + <style:text-properties officeooo:rsid="00c9174a"/> </style:style> <style:style style:name="T237" style:family="text"> - <style:text-properties officeooo:rsid="00cba5e3"/> + <style:text-properties officeooo:rsid="00ca2923"/> </style:style> <style:style style:name="T238" style:family="text"> - <style:text-properties officeooo:rsid="00ccb67c"/> + <style:text-properties officeooo:rsid="00cba5e3"/> </style:style> <style:style style:name="T239" style:family="text"> - <style:text-properties officeooo:rsid="00cef9a3"/> + <style:text-properties officeooo:rsid="00ccb67c"/> </style:style> <style:style style:name="T240" style:family="text"> - <style:text-properties officeooo:rsid="00cfb468"/> + <style:text-properties officeooo:rsid="00cef9a3"/> </style:style> <style:style style:name="T241" style:family="text"> - <style:text-properties officeooo:rsid="00d08d3b"/> + <style:text-properties officeooo:rsid="00cfb468"/> </style:style> <style:style style:name="T242" style:family="text"> - <style:text-properties officeooo:rsid="00d15d24"/> + <style:text-properties officeooo:rsid="00d08d3b"/> </style:style> <style:style style:name="T243" style:family="text"> - <style:text-properties officeooo:rsid="00d707a3"/> + <style:text-properties officeooo:rsid="00d15d24"/> </style:style> <style:style style:name="T244" style:family="text"> - <style:text-properties officeooo:rsid="00d7adce"/> + <style:text-properties officeooo:rsid="00d707a3"/> </style:style> <style:style style:name="T245" style:family="text"> - <style:text-properties officeooo:rsid="00d7bd9c"/> + <style:text-properties officeooo:rsid="00d7adce"/> </style:style> <style:style style:name="T246" style:family="text"> - <style:text-properties officeooo:rsid="00d97987"/> + <style:text-properties officeooo:rsid="00d7bd9c"/> </style:style> <style:style style:name="T247" style:family="text"> - <style:text-properties officeooo:rsid="00daef7b"/> + <style:text-properties officeooo:rsid="00d97987"/> </style:style> <style:style style:name="T248" style:family="text"> - <style:text-properties officeooo:rsid="00dbc83d"/> + <style:text-properties officeooo:rsid="00daef7b"/> </style:style> <style:style style:name="T249" style:family="text"> - <style:text-properties officeooo:rsid="00dd5dd8"/> + <style:text-properties officeooo:rsid="00dbc83d"/> </style:style> <style:style style:name="T250" style:family="text"> - <style:text-properties officeooo:rsid="00ded07e"/> + <style:text-properties officeooo:rsid="00dd5dd8"/> </style:style> <style:style style:name="T251" style:family="text"> - <style:text-properties officeooo:rsid="00dfbcac"/> + <style:text-properties officeooo:rsid="00ded07e"/> </style:style> <style:style style:name="T252" style:family="text"> - <style:text-properties officeooo:rsid="00e102d3"/> + <style:text-properties officeooo:rsid="00dfbcac"/> </style:style> <style:style style:name="T253" style:family="text"> - <style:text-properties officeooo:rsid="00e3b718"/> + <style:text-properties officeooo:rsid="00e102d3"/> </style:style> <style:style style:name="T254" style:family="text"> - <style:text-properties officeooo:rsid="00e49249"/> + <style:text-properties officeooo:rsid="00e3b718"/> </style:style> <style:style style:name="T255" style:family="text"> - <style:text-properties officeooo:rsid="00e7f1bf"/> + <style:text-properties officeooo:rsid="00e49249"/> </style:style> <style:style style:name="T256" style:family="text"> - <style:text-properties officeooo:rsid="00ebdf2a"/> + <style:text-properties officeooo:rsid="00e7f1bf"/> </style:style> <style:style style:name="T257" style:family="text"> - <style:text-properties officeooo:rsid="00ed0f9b"/> + <style:text-properties officeooo:rsid="00ebdf2a"/> </style:style> <style:style style:name="T258" style:family="text"> - <style:text-properties officeooo:rsid="00eede4b"/> + <style:text-properties officeooo:rsid="00ed0f9b"/> </style:style> <style:style style:name="T259" style:family="text"> - <style:text-properties officeooo:rsid="00f02006"/> + <style:text-properties officeooo:rsid="00eede4b"/> </style:style> <style:style style:name="T260" style:family="text"> - <style:text-properties officeooo:rsid="00f2c440"/> + <style:text-properties officeooo:rsid="00f02006"/> </style:style> <style:style style:name="T261" style:family="text"> - <style:text-properties officeooo:rsid="00f63532"/> + <style:text-properties officeooo:rsid="00f2c440"/> </style:style> <style:style style:name="T262" style:family="text"> - <style:text-properties officeooo:rsid="00f8503d"/> + <style:text-properties officeooo:rsid="00f63532"/> </style:style> <style:style style:name="T263" style:family="text"> - <style:text-properties officeooo:rsid="00f87427"/> + <style:text-properties officeooo:rsid="00f8503d"/> </style:style> <style:style style:name="T264" style:family="text"> - <style:text-properties officeooo:rsid="00fabb97"/> + <style:text-properties officeooo:rsid="00f87427"/> </style:style> <style:style style:name="T265" style:family="text"> - <style:text-properties officeooo:rsid="00fd556a"/> + <style:text-properties officeooo:rsid="00fabb97"/> </style:style> <style:style style:name="T266" style:family="text"> + <style:text-properties officeooo:rsid="00fd556a"/> + </style:style> + <style:style style:name="T267" style:family="text"> <style:text-properties officeooo:rsid="00fdd0cb"/> </style:style> + <style:style style:name="T268" style:family="text"> + <style:text-properties officeooo:rsid="00fe6ad2"/> + </style:style> <style:style style:name="Sect1" style:family="section"> <style:section-properties style:editable="false"> <style:columns fo:column-count="1" fo:column-gap="0cm"/> @@ -2187,7 +2208,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">2</text:page-number><text:tab/><text:tab/><text:modification-date style:data-style-name="N84">2019-06-05</text:modification-date>, <text:modification-time style:data-style-name="N41">14:03:22</text:modification-time></text:p> + <text:p text:style-name="Footer"><text:page-number text:select-page="current">10</text:page-number><text:tab/><text:tab/><text:modification-date style:data-style-name="N84">2019-06-27</text:modification-date>, <text:modification-time style:data-style-name="N41">10:15:10</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"/> @@ -2204,8 +2225,8 @@ </text:sequence-decls> <text:p text:style-name="P287">Make Experiments!</text:p> <text:p text:style-name="P277">Run-script generation for earth system models</text:p> - <text:p text:style-name="P278">Release <text:span text:style-name="T257">1.0</text:span>.<text:span text:style-name="T266">5dev</text:span></text:p> - <text:p text:style-name="P252">Karl-Hermann Wieners<text:line-break/><text:span text:style-name="T229">Max-Planck-Institut für Meteorologie<text:line-break/>Hamburg</text:span></text:p> + <text:p text:style-name="P278">Release <text:span text:style-name="T258">1.0</text:span>.<text:span text:style-name="T267">5dev</text:span></text:p> + <text:p text:style-name="P252">Karl-Hermann Wieners<text:line-break/><text:span text:style-name="T230">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> @@ -2338,17 +2359,17 @@ <text:p text:style-name="P82"/> <text:h text:style-name="P254" 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="T154">Make Experiments! (</text:span>mkexp<text:span text:style-name="T154">)</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="P1">The <text:span text:style-name="T155">Make Experiments! (</text:span>mkexp<text:span text:style-name="T155">)</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="P261" 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="T199">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="P3">ECHAM comes with five <text:span text:style-name="T200">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="P101"><text:soft-page-break/># Standard AMIP experiment as baseline for further experiments (LR)</text:p> <text:p text:style-name="P101"/> <text:p text:style-name="P101">EXP_TYPE = amip-LR</text:p> - <text:p text:style-name="P3">For each <text:span text:style-name="T4">experiment type</text:span>, you will find a .config file in the run/standard_experiments subdirectory. For instance, <text:span text:style-name="T198">'</text:span>amip-LR.config<text:span text:style-name="T198">'</text:span> includes these settings</text:p> + <text:p text:style-name="P3">For each <text:span text:style-name="T4">experiment type</text:span>, you will find a .config file in the run/standard_experiments subdirectory. For instance, <text:span text:style-name="T199">'</text:span>amip-LR.config<text:span text:style-name="T199">'</text:span> includes these settings</text:p> <text:p text:style-name="P100"># Default definitions for amip-LR experiments </text:p> <text:p text:style-name="P99"/> <text:p text:style-name="P99">RES = 63 </text:p> @@ -2362,58 +2383,58 @@ <text:p text:style-name="P102"><text:s text:c="2"/>[[namelist.jsbach]] </text:p> <text:p text:style-name="P102"><text:s text:c="4"/>[[[jsbach_ctl]]] </text:p> <text:p text:style-name="P102"><text:s text:c="6"/>use_dynveg <text:s/>= false </text:p> - <text:p text:style-name="P5">As you can see, settings are simple name = value pairs that may be organized in sections. Sections are defined by a bracketed section name. They may contain subsections, where the number of brackets define<text:span text:style-name="T152">s</text:span> the hierarchy depth. The pre-defined sections [namelists] and [jobs] are used for special purposes within <text:span text:style-name="T9">mkexp</text:span>.</text:p> - <text:p text:style-name="P5"><text:span text:style-name="T198">Some s</text:span>ettings apply to all <text:span text:style-name="T198">ECHAM </text:span>experiment types. <text:span text:style-name="T198">They</text:span> go into a file named <text:span text:style-name="T198">'</text:span>DEFAULT.config<text:span text:style-name="T198">'</text:span>. <text:span text:style-name="T9">mkexp</text:span> will <text:span text:style-name="T198">always </text:span>read this file <text:span text:style-name="T198">first, </text:span>before applying <text:span text:style-name="T198">any </text:span>settings from <text:span text:style-name="T198">a specific experiment type like 'amip-LR.config'.</text:span> <text:span text:style-name="T198">Such settings might be default paths for input data, as in</text:span></text:p> - <text:p text:style-name="P106"># <text:span text:style-name="T198">Default definitions for all </text:span>ECHAM experiment<text:span text:style-name="T198">s</text:span></text:p> + <text:p text:style-name="P5">As you can see, settings are simple name = value pairs that may be organized in sections. Sections are defined by a bracketed section name. They may contain subsections, where the number of brackets define<text:span text:style-name="T153">s</text:span> the hierarchy depth. The pre-defined sections [namelists] and [jobs] are used for special purposes within <text:span text:style-name="T9">mkexp</text:span>.</text:p> + <text:p text:style-name="P5"><text:span text:style-name="T199">Some s</text:span>ettings apply to all <text:span text:style-name="T199">ECHAM </text:span>experiment types. <text:span text:style-name="T199">They</text:span> go into a file named <text:span text:style-name="T199">'</text:span>DEFAULT.config<text:span text:style-name="T199">'</text:span>. <text:span text:style-name="T9">mkexp</text:span> will <text:span text:style-name="T199">always </text:span>read this file <text:span text:style-name="T199">first, </text:span>before applying <text:span text:style-name="T199">any </text:span>settings from <text:span text:style-name="T199">a specific experiment type like 'amip-LR.config'.</text:span> <text:span text:style-name="T199">Such settings might be default paths for input data, as in</text:span></text:p> + <text:p text:style-name="P106"># <text:span text:style-name="T199">Default definitions for all </text:span>ECHAM experiment<text:span text:style-name="T199">s</text:span></text:p> <text:p text:style-name="P106"/> <text:p text:style-name="P106">ATMO_INPUT_ROOT = /pool/data/ECHAM6/input/r0004 </text:p> <text:p text:style-name="P106">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="T47">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="P262" 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="T198">Now the experiment configuration is finalized, the </text:span>settings are used to fill in <text:span text:style-name="T198">a kind of job description forms, so called </text:span><text:span text:style-name="T9">templates</text:span><text:span text:style-name="T198">, </text:span>from which eventually the <text:span text:style-name="T198">actual </text:span>job description files are created. As the structure of<text:span text:style-name="T198"> </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="T219">'</text:span>amip.run.tmpl<text:span text:style-name="T219">'</text:span>, also within the run/standard_experiments subdirectory. <text:soft-page-break/><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="T153">placeholders</text:span> that are filled using the .config file information:</text:p> + <text:p text:style-name="P6"><text:span text:style-name="T199">Now the experiment configuration is finalized, the </text:span>settings are used to fill in <text:span text:style-name="T199">a kind of job description forms, so called </text:span><text:span text:style-name="T9">templates</text:span><text:span text:style-name="T199">, </text:span>from which eventually the <text:span text:style-name="T199">actual </text:span>job description files are created. As the structure of<text:span text:style-name="T199"> </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="T220">'</text:span>amip.run.tmpl<text:span text:style-name="T220">'</text:span>, also within the run/standard_experiments subdirectory. <text:soft-page-break/><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="T154">placeholders</text:span> that are filled using the .config file information:</text:p> <text:p text:style-name="P106">#! /bin/bash</text:p> <text:p text:style-name="P106"/> <text:p text:style-name="P106"># Job file to run ECHAM 6 </text:p> <text:p text:style-name="P106"/> - <text:p text:style-name="P110">EXP=<text:span text:style-name="T141">%{EXP_ID}</text:span> # experiment identifier </text:p> + <text:p text:style-name="P110">EXP=<text:span text:style-name="T142">%{EXP_ID}</text:span> # experiment identifier </text:p> <text:p text:style-name="P106"/> - <text:p text:style-name="P106">RES=<text:span text:style-name="T141">%{RES}</text:span> <text:span text:style-name="T153"># experiment truncation</text:span></text:p> + <text:p text:style-name="P106">RES=<text:span text:style-name="T142">%{RES}</text:span> <text:span text:style-name="T154"># experiment truncation</text:span></text:p> <text:p text:style-name="P106"/> <text:p text:style-name="P110"># absolute paths to directories with initial data: </text:p> - <text:p text:style-name="P110">ATMO_DATA=<text:span text:style-name="T141">%{ATMO_INPUT_ROOT}</text:span> </text:p> + <text:p text:style-name="P110">ATMO_DATA=<text:span text:style-name="T142">%{ATMO_INPUT_ROOT}</text:span> </text:p> <text:p text:style-name="P110">ATMO_MAP_DATA=$ATMO_DATA/T${RES} </text:p> <text:p text:style-name="P110"/> <text:p text:style-name="P110"># absolute path to directory with initial data for JSBACH: </text:p> - <text:p text:style-name="P110">LAND_MAP_DATA=<text:span text:style-name="T141">%{LAND_INPUT_ROOT}</text:span>/T${RES} </text:p> + <text:p text:style-name="P110">LAND_MAP_DATA=<text:span text:style-name="T142">%{LAND_INPUT_ROOT}</text:span>/T${RES} </text:p> <text:p text:style-name="P107"/> <text:p text:style-name="P107"># </text:p> <text:p text:style-name="P106"># ECHAM6 namelist </text:p> <text:p text:style-name="P106"># </text:p> <text:p text:style-name="P106">cat > namelist.echam << EOF </text:p> - <text:p text:style-name="P106"><text:span text:style-name="T141">%{NAMELIST_ECHAM}</text:span> </text:p> + <text:p text:style-name="P106"><text:span text:style-name="T142">%{NAMELIST_ECHAM}</text:span> </text:p> <text:p text:style-name="P106">EOF </text:p> <text:p text:style-name="P106"/> <text:p text:style-name="P106"># </text:p> <text:p text:style-name="P106"># JSBACH namelist</text:p> <text:p text:style-name="P106"># </text:p> <text:p text:style-name="P106">cat > namelist.jsbach << EOF </text:p> - <text:p text:style-name="P106"><text:span text:style-name="T141">%{NAMELIST_JSBACH}</text:span> </text:p> + <text:p text:style-name="P106"><text:span text:style-name="T142">%{NAMELIST_JSBACH}</text:span> </text:p> <text:p text:style-name="P106">EOF </text:p> - <text:p text:style-name="P7"><text:span text:style-name="T199">T</text:span>h<text:span text:style-name="T199">e</text:span>se <text:span text:style-name="T199">'</text:span>%{...}<text:span text:style-name="T199">'</text:span> construct<text:span text:style-name="T7">s</text:span> correspond to the configuration settings shown in the previous section. The value for <text:span text:style-name="T219">the setting </text:span>given <text:span text:style-name="T199">by the variable name between '%{' and '}'</text:span> is pasted into the template, replacing the placeholder. The special names 'NAMELIST_ECHAM' and 'NAMELIST_JSBACH' contain the contents of the 'namelists' subsections, with each setting taken to be a Fortran namelist setting, and formatted accordingly. 'EXP_ID' is taken to be the base filename of the experiment's .config file. The result of this operation is then written to the final job script, in our case <text:span text:style-name="T199">'</text:span>joe1234.run<text:span text:style-name="T199">'</text:span>:</text:p> + <text:p text:style-name="P7"><text:span text:style-name="T200">T</text:span>h<text:span text:style-name="T200">e</text:span>se <text:span text:style-name="T200">'</text:span>%{...}<text:span text:style-name="T200">'</text:span> construct<text:span text:style-name="T7">s</text:span> correspond to the configuration settings shown in the previous section. The value for <text:span text:style-name="T220">the setting </text:span>given <text:span text:style-name="T200">by the variable name between '%{' and '}'</text:span> is pasted into the template, replacing the placeholder. The special names 'NAMELIST_ECHAM' and 'NAMELIST_JSBACH' contain the contents of the 'namelists' subsections, with each setting taken to be a Fortran namelist setting, and formatted accordingly. 'EXP_ID' is taken to be the base filename of the experiment's .config file. The result of this operation is then written to the final job script, in our case <text:span text:style-name="T200">'</text:span>joe1234.run<text:span text:style-name="T200">'</text:span>:</text:p> <text:p text:style-name="P107"><text:soft-page-break/>#! /bin/bash</text:p> <text:p text:style-name="P107"/> <text:p text:style-name="P107"># Job file to run ECHAM 6 </text:p> <text:p text:style-name="P107"/> - <text:p text:style-name="P110">EXP=<text:span text:style-name="T141">joe1234</text:span> # experiment identifier </text:p> + <text:p text:style-name="P110">EXP=<text:span text:style-name="T142">joe1234</text:span> # experiment identifier </text:p> <text:p text:style-name="P107"/> - <text:p text:style-name="P107">RES=<text:span text:style-name="T142">63</text:span><text:span text:style-name="T6"> # experiment truncation</text:span></text:p> + <text:p text:style-name="P107">RES=<text:span text:style-name="T143">63</text:span><text:span text:style-name="T6"> # experiment truncation</text:span></text:p> <text:p text:style-name="P107"/> <text:p text:style-name="P107">#<text:span text:style-name="T6"> absolute paths to directories with initial data: </text:span></text:p> - <text:p text:style-name="P110">ATMO_DATA=<text:span text:style-name="T143">/pool/data/ECHAM6/input/r0004</text:span><text:span text:style-name="T5"> </text:span></text:p> + <text:p text:style-name="P110">ATMO_DATA=<text:span text:style-name="T144">/pool/data/ECHAM6/input/r0004</text:span><text:span text:style-name="T5"> </text:span></text:p> <text:p text:style-name="P110">ATMO_MAP_DATA=$ATMO_DATA/T${RES} </text:p> <text:p text:style-name="P110"/> <text:p text:style-name="P110"># absolute path to directory with initial data for JSBACH: </text:p> - <text:p text:style-name="P110">LAND_MAP_DATA=<text:span text:style-name="T143">/pool/data/JSBACH/input/r0004</text:span>/T${RES} </text:p> + <text:p text:style-name="P110">LAND_MAP_DATA=<text:span text:style-name="T144">/pool/data/JSBACH/input/r0004</text:span>/T${RES} </text:p> <text:p text:style-name="P110"/> <text:p text:style-name="P110">#</text:p> <text:p text:style-name="P107"># ECHAM6 namelist </text:p> @@ -2432,24 +2453,24 @@ <text:p text:style-name="P113"><text:s text:c="4"/>use_dynveg = .false.</text:p> <text:p text:style-name="P113">/</text:p> <text:p text:style-name="P107">EOF </text:p> - <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2526_1114405012"/><text:span text:style-name="T199">G</text:span>enerat<text:span text:style-name="T199">ing scripts only refers to the custom settings' file</text:span><text:bookmark-end text:name="__RefHeading__2526_1114405012"/></text:h> - <text:p text:style-name="P13"><text:span text:style-name="T198">So, as soon as</text:span> <text:span text:style-name="T198">you have set up '</text:span>joe1234.config<text:span text:style-name="T198">'</text:span>, you may create the job scripts that are needed to run your experiment. Still within ECHAM's <text:span text:style-name="T200">'</text:span>run<text:span text:style-name="T200">'</text:span> subdirectory, type the following into your terminal:</text:p> + <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2526_1114405012"/><text:span text:style-name="T200">G</text:span>enerat<text:span text:style-name="T200">ing scripts only refers to the custom settings' file</text:span><text:bookmark-end text:name="__RefHeading__2526_1114405012"/></text:h> + <text:p text:style-name="P13"><text:span text:style-name="T199">So, as soon as</text:span> <text:span text:style-name="T199">you have set up '</text:span>joe1234.config<text:span text:style-name="T199">'</text:span>, you may create the job scripts that are needed to run your experiment. Still within ECHAM's <text:span text:style-name="T201">'</text:span>run<text:span text:style-name="T201">'</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="T154">read all configuration information and </text:span>create all job scripts that are defined within your experiment's setup, <text:span text:style-name="T154">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="T154">scripts </text:span>in <text:span text:style-name="T154">a common</text:span> directory defined by the .config variable <text:span text:style-name="T200">'</text:span>SCRIPT_DIR<text:span text:style-name="T200">'</text:span>, and <text:span text:style-name="T200">print</text:span> the name of this directory on your terminal.</text:p> - <text:h text:style-name="P258" text:outline-level="1"><text:bookmark-start text:name="__RefHeading__2528_1114405012"/>Details on <text:span text:style-name="T218">experiment</text:span> <text:span text:style-name="T218">definition</text:span><text:bookmark-end text:name="__RefHeading__2528_1114405012"/></text:h> + <text:p text:style-name="P14">This will <text:span text:style-name="T155">read all configuration information and </text:span>create all job scripts that are defined within your experiment's setup, <text:span text:style-name="T155">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="T155">scripts </text:span>in <text:span text:style-name="T155">a common</text:span> directory defined by the .config variable <text:span text:style-name="T201">'</text:span>SCRIPT_DIR<text:span text:style-name="T201">'</text:span>, and <text:span text:style-name="T201">print</text:span> the name of this directory on your terminal.</text:p> + <text:h text:style-name="P258" text:outline-level="1"><text:bookmark-start text:name="__RefHeading__2528_1114405012"/>Details on <text:span text:style-name="T219">experiment</text:span> <text:span text:style-name="T219">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="T50">.</text:span></text:p> <text:h text:style-name="P279" 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="T180">is organized</text:span> <text:span text:style-name="T180">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="T179">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="T56">, it refers to this system level.</text:span></text:p> - <text:p text:style-name="P34"><text:span text:style-name="T179">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="T179">: 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="T55">. 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="T55">.</text:span></text:p> + <text:p text:style-name="P34">Experiment definition with <text:span text:style-name="T9">mkexp</text:span> <text:span text:style-name="T181">is organized</text:span> <text:span text:style-name="T181">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="T180">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="T56">, it refers to this system level.</text:span></text:p> + <text:p text:style-name="P34"><text:span text:style-name="T180">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="T180">: 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="T55">. 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="T55">.</text:span></text:p> <text:p text:style-name="P35"><text:span text:style-name="T50">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="T87">defines</text:span><text:span text:style-name="T50"> 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="T50">.</text:span></text:p> <text:p text:style-name="P36"><text:span text:style-name="T50">All levels should make a clear distinction </text:span><text:span text:style-name="T57">between </text:span><text:span text:style-name="T50">the .config files, containing the experiment's configuration information, </text:span><text:span text:style-name="T57">and </text:span><text:span text:style-name="T50">the .tmpl files, containing the actual job description and job control syntax.</text:span></text:p> <text:h text:style-name="P280" 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="T154">The </text:span><text:span text:style-name="T32">mkexp</text:span><text:span text:style-name="T154"> 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="T248">[-m] [-g] </text:span><text:span text:style-name="T23">file</text:span><text:span text:style-name="T68">.</text:span><text:span text:style-name="T50">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="P203"><text:span text:style-name="T154">This is the main tool for generating an experiment setup. It </text:span>takes <text:span text:style-name="T201">the given</text:span> <text:span text:style-name="T201">user setup</text:span> and <text:span text:style-name="T220">the model setup that is referenced by the user setup </text:span>to generate <text:span text:style-name="T201">the</text:span> <text:span text:style-name="T201">job description files or</text:span> scripts that <text:span text:style-name="T220">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="T68">config</text:span><text:span text:style-name="T201">.</text:span></text:p> + <text:p text:style-name="P83"><text:span text:style-name="T155">The </text:span><text:span text:style-name="T32">mkexp</text:span><text:span text:style-name="T155"> 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="T249">[-m] [-g] </text:span><text:span text:style-name="T23">file</text:span><text:span text:style-name="T68">.</text:span><text:span text:style-name="T50">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="P203"><text:span text:style-name="T155">This is the main tool for generating an experiment setup. It </text:span>takes <text:span text:style-name="T202">the given</text:span> <text:span text:style-name="T202">user setup</text:span> and <text:span text:style-name="T221">the model setup that is referenced by the user setup </text:span>to generate <text:span text:style-name="T202">the</text:span> <text:span text:style-name="T202">job description files or</text:span> scripts that <text:span text:style-name="T221">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="T68">config</text:span><text:span text:style-name="T202">.</text:span></text:p> <text:p text:style-name="P207">When running, <text:span text:style-name="T9">mkexp</text:span><text:span text:style-name="T50"> creates three directories, one each for the job scripts, run-time data, and output data, as defined by the setup. The names of these are printed, plus warnings if they already exist.</text:span></text:p> - <text:p text:style-name="P206">mkexp<text:span text:style-name="T50"> allows to override </text:span><text:span text:style-name="T66">or amend </text:span><text:span text:style-name="T50">the .config file settings on the command line </text:span><text:soft-page-break/><text:span text:style-name="T66">by defining or re-defining a variable </text:span><text:span text:style-name="T202">name</text:span><text:span text:style-name="T66"> set to </text:span><text:span text:style-name="T202">value</text:span><text:span text:style-name="T66">. Section variables are referenced as </text:span><text:span text:style-name="T202">sectionname</text:span><text:span text:style-name="T66">.</text:span><text:span text:style-name="T202">variablename</text:span><text:span text:style-name="T66">. 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 '..', thus it is not possible to use variable names th</text:span><text:span text:style-name="T88">at</text:span><text:span text:style-name="T66"> </text:span><text:span text:style-name="T202">end</text:span><text:span text:style-name="T66"> </text:span><text:span text:style-name="T88">i</text:span><text:span text:style-name="T66">n a period.</text:span></text:p> + <text:p text:style-name="P206">mkexp<text:span text:style-name="T50"> allows to override </text:span><text:span text:style-name="T66">or amend </text:span><text:span text:style-name="T50">the .config file settings on the command line </text:span><text:soft-page-break/><text:span text:style-name="T66">by defining or re-defining a variable </text:span><text:span text:style-name="T203">name</text:span><text:span text:style-name="T66"> set to </text:span><text:span text:style-name="T203">value</text:span><text:span text:style-name="T66">. Section variables are referenced as </text:span><text:span text:style-name="T203">sectionname</text:span><text:span text:style-name="T66">.</text:span><text:span text:style-name="T203">variablename</text:span><text:span text:style-name="T66">. 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 '..', thus it is not possible to use variable names th</text:span><text:span text:style-name="T88">at</text:span><text:span text:style-name="T66"> </text:span><text:span text:style-name="T203">end</text:span><text:span text:style-name="T66"> </text:span><text:span text:style-name="T88">i</text:span><text:span text:style-name="T66">n a period.</text:span></text:p> <text:p text:style-name="P222"><text:span text:style-name="T66">W</text:span><text:span text:style-name="T50">hen given the '-m' or '--no-make-dirs' option, only the </text:span><text:span text:style-name="T67">script</text:span><text:span text:style-name="T50"> directory is created while creation of the </text:span><text:span text:style-name="T67">run-time and outpu</text:span><text:span text:style-name="T50">t directories is skipped.</text:span></text:p> <text:p text:style-name="P224">With '-g' or '--getexp', instead of a .config file, <text:span text:style-name="T9">mkexp</text:span><text:span text:style-name="T50"> expects a dump generated by </text:span><text:span text:style-name="T9">getexp -vv</text:span><text:span text:style-name="T50"> (see below). The experiment setup is regenerated from this dump, overriding any model setup.</text:span></text:p> <text:p text:style-name="P230"><text:span text:style-name="T66">g</text:span><text:span text:style-name="T50">etexp [-v ...] </text:span><text:span text:style-name="T99">[-R]</text:span><text:span text:style-name="T50"> </text:span><text:span text:style-name="T105">[-k </text:span><text:span text:style-name="T39">key</text:span><text:span text:style-name="T105">] </text:span><text:span text:style-name="T9">file</text:span><text:span text:style-name="T50">.config [</text:span><text:span text:style-name="T9">name</text:span><text:span text:style-name="T50">=</text:span><text:span text:style-name="T9">value ...</text:span><text:span text:style-name="T50">]</text:span></text:p> @@ -2457,20 +2478,22 @@ <text:p text:style-name="P208"><text:span text:style-name="T50">When given the '-v' </text:span><text:span text:style-name="T99">or '--</text:span><text:span text:style-name="T50">verbose</text:span><text:span text:style-name="T99">'</text:span><text:span text:style-name="T50"> option, all </text:span><text:span text:style-name="T9">global</text:span><text:span text:style-name="T50"> configuration variables and their values are printed in alphabetical order. </text:span><text:span text:style-name="T99">When given twice, the whole configuration is dumped </text:span><text:span text:style-name="T104">to the screen</text:span><text:span text:style-name="T99">. </text:span><text:span text:style-name="T104">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="T104">.</text:span></text:p> <text:p text:style-name="P195">When given the '-R' or '--readme' option, the header comment text is printed.</text:p> <text:p text:style-name="P227">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="T50">. </text:span><text:span text:style-name="T107">This option may be used more than once to print additional values.</text:span><text:span text:style-name="T50"> </text:span></text:p> - <text:p text:style-name="P242">diffexp <text:span text:style-name="T22">file</text:span><text:span text:style-name="T23">1</text:span><text:span text:style-name="T203">.config </text:span><text:span text:style-name="T22">file2</text:span><text:span text:style-name="T67">.</text:span><text:span text:style-name="T68">config</text:span></text:p> + <text:p text:style-name="P242">diffexp <text:span text:style-name="T22">file</text:span><text:span text:style-name="T23">1</text:span><text:span text:style-name="T204">.config </text:span><text:span text:style-name="T22">file2</text:span><text:span text:style-name="T67">.</text:span><text:span text:style-name="T68">config</text:span></text:p> <text:p text:style-name="P192">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="P231">rmexp <text:span text:style-name="T24">file</text:span><text:span text:style-name="T204">.config</text:span><text:span text:style-name="T69"> [</text:span><text:span text:style-name="T24">name</text:span><text:span text:style-name="T69">=</text:span><text:span text:style-name="T24">value ...</text:span><text:span text:style-name="T69">]</text:span></text:p> - <text:p text:style-name="P210">This allows <text:span text:style-name="T207">interactive </text:span>remov<text:span text:style-name="T207">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="P244"><text:span text:style-name="T249">cp</text:span>exp <text:span text:style-name="T24">file</text:span><text:span text:style-name="T204">.config</text:span><text:span text:style-name="T69"> </text:span><text:span text:style-name="T37">new_name</text:span><text:span text:style-name="T100"> </text:span><text:span text:style-name="T69">[</text:span><text:span text:style-name="T24">name</text:span><text:span text:style-name="T69">=</text:span><text:span text:style-name="T24">value ...</text:span><text:span text:style-name="T69">]</text:span></text:p> - <text:p text:style-name="P225"><text:span text:style-name="T250">Replicates all data </text:span>of an experiment <text:span text:style-name="T249">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="P244"><text:span text:style-name="T259">du</text:span>exp <text:span text:style-name="T24">file</text:span><text:span text:style-name="T204">.config</text:span><text:span text:style-name="T69"> [</text:span><text:span text:style-name="T24">name</text:span><text:span text:style-name="T69">=</text:span><text:span text:style-name="T24">value ...</text:span><text:span text:style-name="T69">]</text:span></text:p> - <text:p text:style-name="P225"><text:span text:style-name="T259">Shows disk usage for all data that has been created by</text:span> <text:span text:style-name="T259">an</text:span> experiment.</text:p> - <text:h text:style-name="P284" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__2534_1114405012"/><text:soft-page-break/><text:span text:style-name="T160">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="T155">For reading these files, </text:span><text:span text:style-name="T12">mkexp</text:span><text:span text:style-name="T155"> uses the </text:span><text:span text:style-name="T12">configobj</text:span><text:span text:style-name="T155"> Python library. All settings found in the .config files are handled as Python variables internally.</text:span></text:p> + <text:p text:style-name="P231">rmexp <text:span text:style-name="T24">file</text:span><text:span text:style-name="T205">.config</text:span><text:span text:style-name="T69"> [</text:span><text:span text:style-name="T24">name</text:span><text:span text:style-name="T69">=</text:span><text:span text:style-name="T24">value ...</text:span><text:span text:style-name="T69">]</text:span></text:p> + <text:p text:style-name="P210">This allows <text:span text:style-name="T208">interactive </text:span>remov<text:span text:style-name="T208">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="P244"><text:span text:style-name="T250">cp</text:span>exp <text:span text:style-name="T24">file</text:span><text:span text:style-name="T205">.config</text:span><text:span text:style-name="T69"> </text:span><text:span text:style-name="T37">new_name</text:span><text:span text:style-name="T100"> </text:span><text:span text:style-name="T69">[</text:span><text:span text:style-name="T24">name</text:span><text:span text:style-name="T69">=</text:span><text:span text:style-name="T24">value ...</text:span><text:span text:style-name="T69">]</text:span></text:p> + <text:p text:style-name="P225"><text:span text:style-name="T251">Replicates all data </text:span>of an experiment <text:span text:style-name="T250">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="P313"><text:span text:style-name="T260">du</text:span>exp <text:span text:style-name="T24">file</text:span><text:span text:style-name="T205">.config</text:span><text:span text:style-name="T69"> [</text:span><text:span text:style-name="T24">name</text:span><text:span text:style-name="T69">=</text:span><text:span text:style-name="T24">value ...</text:span><text:span text:style-name="T69">]</text:span></text:p> + <text:p text:style-name="P309"><text:span text:style-name="T110">Shows disk usage for all data that has been created by</text:span><text:span text:style-name="T69"> </text:span><text:span text:style-name="T110">an</text:span><text:span text:style-name="T69"> experiment.</text:span></text:p> + <text:p text:style-name="P244"><text:soft-page-break/><text:span text:style-name="T268">getconfig</text:span> <text:span text:style-name="T268">[</text:span><text:span text:style-name="T24">file</text:span><text:span text:style-name="T205">]</text:span></text:p> + <text:p text:style-name="P311">Documentation tool for experiments that were created using command line assignments. Reads an update script file ('update' by default) and prints the corresponding config file with command line settings from the update script included.</text:p> + <text:h text:style-name="P284" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__2534_1114405012"/><text:span text:style-name="T161">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="T156">For reading these files, </text:span><text:span text:style-name="T12">mkexp</text:span><text:span text:style-name="T156"> uses the </text:span><text:span text:style-name="T12">configobj</text:span><text:span text:style-name="T156"> 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"/>Variables<text:bookmark-end text:name="__RefHeading__1669_1438093122"/></text:h> - <text:p text:style-name="P18">A <text:span text:style-name="T156">configuration variable is set by simply assigning a text value to a name, as in</text:span></text:p> + <text:p text:style-name="P18">A <text:span text:style-name="T157">configuration variable is set by simply assigning a text value to a name, as in</text:span></text:p> <text:p text:style-name="Preformatted_20_Text">NAME = Joe User</text:p> - <text:p text:style-name="P19">Note that <text:span text:style-name="T157">spaces before and after the 'equals' sign are always ignored. The value starts with the first non-space character. Spaces and additional equals after this are part of the value. In the case above, the variable NAME is set to 'Joe User'. To include leading spaces, you may enclose the actual value in single or double quote characters as in</text:span></text:p> + <text:p text:style-name="P19">Note that <text:span text:style-name="T158">spaces before and after the 'equals' sign are always ignored. The value starts with the first non-space character. Spaces and additional equals after this are part of the value. In the case above, the variable NAME is set to 'Joe User'. To include leading spaces, you may enclose the actual value in single or double quote characters as in</text:span></text:p> <text:p text:style-name="Preformatted_20_Text">SEPARATOR = ' <text:s text:c="7"/>'</text:p> <text:p text:style-name="P20">Comma separated values are taken to be a list of string values. Thus</text:p> <text:p text:style-name="Preformatted_20_Text">PATH = /bin, /usr/bin, /usr/local/bin</text:p> @@ -2479,32 +2502,32 @@ <text:p text:style-name="P22">Variable assignments may be contained in <text:span text:style-name="T9">sections</text:span><text:span text:style-name="T50">. They </text:span><text:span text:style-name="T52">group</text:span><text:span text:style-name="T50"> a set of variables that may be treated </text:span><text:span text:style-name="T89">in a way </text:span><text:span text:style-name="T50">different fro</text:span><text:span text:style-name="T89">m</text:span><text:span text:style-name="T50"> the global variables. Sections are created by a section name on a line by itself, enclosed by brackets. Any variables defined later in the .config file belong to this section:</text:span></text:p> <text:p text:style-name="P126">[section1]</text:p> <text:p text:style-name="P126"><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="T158">as in</text:span></text:p> - <text:p text:style-name="Preformatted_20_Text"><text:soft-page-break/>[section1]</text:p> + <text:p text:style-name="P22">will be stored as a dictionary section1 with section1['description'] set to 'This is the <text:soft-page-break/>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="T159">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: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> - <text:p text:style-name="P121"><text:s text:c="4"/>[[subsection1<text:span text:style-name="T158">b</text:span>]]</text:p> - <text:p text:style-name="P121"><text:s text:c="8"/>description = This is the <text:span text:style-name="T158">second</text:span> sub section of the first section</text:p> + <text:p text:style-name="P121"><text:s text:c="4"/>[[subsection1<text:span text:style-name="T159">b</text:span>]]</text:p> + <text:p text:style-name="P121"><text:s text:c="8"/>description = This is the <text:span text:style-name="T159">second</text:span> sub section of the first section</text:p> <text:p text:style-name="P120">[section2]</text:p> <text:p text:style-name="P120"><text:s text:c="4"/>description = This is the second section </text:p> - <text:p text:style-name="P23"><text:span text:style-name="T205">A s</text:span>ection <text:span text:style-name="T205">is</text:span> closed by the beginning of a new section of the same level, by a section <text:span text:style-name="T205">of </text:span>l<text:span text:style-name="T205">ower</text:span> <text:span text:style-name="T205">nesting </text:span>depth, <text:span text:style-name="T205">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">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="T159">long</text:span> to the respective subsection.</text:p> + <text:p text:style-name="P23"><text:span text:style-name="T206">A s</text:span>ection <text:span text:style-name="T206">is</text:span> closed by the beginning of a new section of the same level, by a section <text:span text:style-name="T206">of </text:span>l<text:span text:style-name="T206">ower</text:span> <text:span text:style-name="T206">nesting </text:span>depth, <text:span text:style-name="T206">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">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="T160">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="T197">v</text:span>ariables <text:span text:style-name="T197">and sections</text:span><text:bookmark-end text:name="__RefHeading__2538_1114405012"/></text:h> + <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="T198">v</text:span>ariables <text:span text:style-name="T198">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="T50">There are a number of special variables that influence the way </text:span>mkexp<text:span text:style-name="T50"> works. They must be present in one of the .config files, unless noted otherwise below. </text:span><text:span text:style-name="T54">They are listed here for a first overview. Their exact meaning is explained in more detail in the upcoming sections.</text:span></text:p> <text:p text:style-name="P40"><text:span text:style-name="T54">T</text:span><text:span text:style-name="T50">he first set of variables is usually defined in the model setup:</text:span></text:p> <text:p text:style-name="P169">SCRIPT_DIR</text:p> <text:p text:style-name="P183"><text:span text:style-name="T53">D</text:span><text:span text:style-name="T50">irectory where the generated job descriptions are stored. This directory and its parents are created by </text:span><text:span text:style-name="T9">mkexp</text:span><text:span text:style-name="T50"> if they do not exist.</text:span></text:p> <text:p text:style-name="P170">WORK_DIR</text:p> - <text:p text:style-name="P186">Directory where the experiment is run. The jobs will use this for providing input data and configuration files needed for model execution. This directory and its parents are created if they do not exist.</text:p> + <text:p text:style-name="P186">Directory where the experiment is run. The jobs will use this for providing input data and configuration files needed for model execution. This directory and its <text:soft-page-break/>parents are created if they do not exist.</text:p> <text:p text:style-name="P171">DATA_DIR</text:p> <text:p text:style-name="P186">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="P175"><text:soft-page-break/>VERSION_</text:p> - <text:p text:style-name="P193">Each .config file in the model setup <text:span text:style-name="T235">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="P175">VERSION_</text:p> + <text:p text:style-name="P193">Each .config file in the model setup <text:span text:style-name="T236">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="P176">SETUP_OPTIONS (<text:span text:style-name="T9">optional</text:span>)</text:p> - <text:p text:style-name="P190">Subset of the model's standard options that should be applied to <text:span text:style-name="T244">all</text:span> experiment<text:span text:style-name="T244">s using the same model version</text:span>. </text:p> + <text:p text:style-name="P190">Subset of the model's standard options that should be applied to <text:span text:style-name="T245">all</text:span> experiment<text:span text:style-name="T245">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="P173">EXP_TYPE</text:p> <text:p text:style-name="P188">Selects one of the standard experiments that are pre-defined in the model setup as basis of the current experiment definition.</text:p> @@ -2514,15 +2537,15 @@ <text:p text:style-name="P189">Subset of the model's standard options that should be applied to the current experiment definition.</text:p> <text:p text:style-name="P180">EXP_ID (<text:span text:style-name="T9">optional</text:span>)</text:p> <text:p text:style-name="P201">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="P168">EXP_DESCRIPTION <text:span text:style-name="T178">(</text:span><text:span text:style-name="T16">optional</text:span><text:span text:style-name="T178">)</text:span></text:p> - <text:p text:style-name="P187">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, <text:span text:style-name="T264">as well as </text:span>leading and trailing empty lines <text:span text:style-name="T264">or comment boilerplate </text:span>are removed. Note that <text:span text:style-name="T221">both header comment and </text:span>EXP_DESCRIPTION may reference any other global variable defined in the experiment configuration <text:span text:style-name="T221">(see section </text:span><text:span text:style-name="T221"><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="T221">)</text:span>.</text:p> + <text:p text:style-name="P168">EXP_DESCRIPTION <text:span text:style-name="T179">(</text:span><text:span text:style-name="T16">optional</text:span><text:span text:style-name="T179">)</text:span></text:p> + <text:p text:style-name="P187">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, <text:span text:style-name="T265">as well as </text:span>leading and trailing empty lines <text:span text:style-name="T265">or comment boilerplate </text:span>are removed. Note that <text:span text:style-name="T222">both header comment and </text:span>EXP_DESCRIPTION may reference any other global variable defined in the experiment configuration <text:span text:style-name="T222">(see section </text:span><text:span text:style-name="T222"><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="T222">)</text:span>.</text:p> <text:p text:style-name="P187">The contents of this variable is written to a 'README' file in SCRIPT_DIR.</text:p> <text:p text:style-name="P38"><text:span text:style-name="T50">Another set of variables is automatically added to the job specific experiment configuration. </text:span><text:span text:style-name="T65">These are considered read-only</text:span><text:span text:style-name="T50"> </text:span><text:span text:style-name="T58">and may not be altered</text:span><text:span text:style-name="T50">.</text:span></text:p> <text:p text:style-name="P167">JOB</text:p> - <text:p text:style-name="P184">A dictionary of system settings pertaining to the current job.</text:p> + <text:p text:style-name="P184"><text:soft-page-break/>A dictionary of system settings pertaining to the current job.</text:p> <text:p text:style-name="P172">VARIABLES_</text:p> <text:p text:style-name="P191">List of all names that were recognized as native variables of the current job. May be used to maintain a variable definition list in the generated script.</text:p> - <text:p text:style-name="P181"><text:soft-page-break/><text:span text:style-name="T62">m</text:span><text:span text:style-name="T50">kexp_input</text:span></text:p> + <text:p text:style-name="P181"><text:span text:style-name="T62">m</text:span><text:span text:style-name="T50">kexp_input</text:span></text:p> <text:p text:style-name="P194">Descriptive string for script headers. It is set to 'Generated by … mkexp …' where the ellipses are filled with version information.</text:p> <text:p text:style-name="P175">VERSIONS_</text:p> <text:p text:style-name="P193">List of all 'VERSION_' strings that were found in the different .config files.</text:p> @@ -2530,14 +2553,14 @@ <text:p text:style-name="List_20_Heading">[jobs]</text:p> <text:p text:style-name="P202">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="P202">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="T210">'</text:span><text:span text:style-name="T210"><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="T210">'.</text:span></text:p> + <text:p text:style-name="P202">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="T211">'</text:span><text:span text:style-name="T211"><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="T211">'.</text:span></text:p> <text:p text:style-name="P182">[files]</text:p> - <text:p text:style-name="P216">All input files that are needed for an experiment and <text:span text:style-name="T232">information</text:span> to provide them go into this section. <text:span text:style-name="T232">See section </text:span><text:span text:style-name="T232"><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="T232">, '</text:span><text:span text:style-name="T232"><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="T232">'.</text:span></text:p> + <text:p text:style-name="P216">All input files that are needed for an experiment and <text:span text:style-name="T233">information</text:span> to provide them go into this section. <text:span text:style-name="T233">See section </text:span><text:span text:style-name="T233"><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="T233">, '</text:span><text:span text:style-name="T233"><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="T233">'.</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="T211">a </text:span>dollar sign. <text:span text:style-name="T211">This is called </text:span><text:span text:style-name="T26">interpolation</text:span><text:span text:style-name="T76"> of variables. E.g.</text:span></text:p> + <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="T212">a </text:span>dollar sign. <text:span text:style-name="T212">This is called </text:span><text:span text:style-name="T26">interpolation</text:span><text:span text:style-name="T76"> of variables. E.g.</text:span></text:p> <text:p text:style-name="P154"># joe1234.config</text:p> <text:p text:style-name="P160">WORK_ROOT = /scratch/joe</text:p> - <text:p text:style-name="Preformatted_20_Text">WORK_DIR = $WORK_ROOT/experiments/<text:span text:style-name="T212">$EXP_ID</text:span></text:p> + <text:p text:style-name="Preformatted_20_Text">WORK_DIR = $WORK_ROOT/experiments/<text:span text:style-name="T213">$EXP_ID</text:span></text:p> <text:p text:style-name="P74">will set 'WORK_DIR' to '/scratch/joe/experiments/joe1234'.</text:p> <text:p text:style-name="P73">Interpolation only works for variables of the current section or its ancestor sections.</text:p> <text:p text:style-name="Preformatted_20_Text">[ensembles] </text:p> @@ -2545,136 +2568,136 @@ <text:p text:style-name="Preformatted_20_Text">[jobs] </text:p> <text:p text:style-name="Preformatted_20_Text"><text:s text:c="2"/>ensemble_size = $size </text:p> <text:p text:style-name="P73">will fail with</text:p> - <text:p text:style-name="Preformatted_20_Text">Oops: missing option "size" in interpolation while reading key 'ensemble_size'</text:p> + <text:p text:style-name="Preformatted_20_Text"><text:soft-page-break/>Oops: missing option "size" in interpolation while reading key 'ensemble_size'</text:p> <text:p text:style-name="P73">because 'size' is not defined in 'jobs', nor on the global level.</text:p> - <text:p text:style-name="P75">As in shell scripts, the variable name must be enclosed in braces if the interpolation <text:soft-page-break/>continues with a word character (alphanumerical or underscore), or if the variable name contains a space (which is perfectly legal):</text:p> - <text:p text:style-name="Preformatted_20_Text">WORK_DIR = /tmp/$EXP_ID_test <text:s text:c="3"/><text:span text:style-name="T212"># ERROR: missing option "EXP_ID_test"</text:span></text:p> - <text:p text:style-name="P155"><text:span text:style-name="T212">WORK_DIR = /tmp/</text:span><text:span text:style-name="T148">${EXP_ID}_test</text:span><text:span text:style-name="T212"> <text:s/># OK</text:span></text:p> + <text:p text:style-name="P75">As in shell scripts, the variable name must be enclosed in braces if the interpolation continues with a word character (alphanumerical or underscore), or if the variable name contains a space (which is perfectly legal):</text:p> + <text:p text:style-name="Preformatted_20_Text">WORK_DIR = /tmp/$EXP_ID_test <text:s text:c="3"/><text:span text:style-name="T213"># ERROR: missing option "EXP_ID_test"</text:span></text:p> + <text:p text:style-name="P155"><text:span text:style-name="T213">WORK_DIR = /tmp/</text:span><text:span text:style-name="T149">${EXP_ID}_test</text:span><text:span text:style-name="T213"> <text:s/># OK</text:span></text:p> <text:p text:style-name="P154"/> - <text:p text:style-name="P154">SPACY <text:span text:style-name="T213">VAR</text:span> = Whew! </text:p> - <text:p text:style-name="P154"><text:span text:style-name="T213">MESSAGE</text:span> = He said: $SPACY VAR <text:s text:c="2"/><text:span text:style-name="T213"># ERROR: missing option </text:span>"<text:span text:style-name="T213">SPACY</text:span>"</text:p> - <text:p text:style-name="P156">MESSAGE = <text:span text:style-name="T212">He said: </text:span><text:span text:style-name="T148">$</text:span><text:span text:style-name="T141">{</text:span><text:span text:style-name="T148">SPACY VAR</text:span><text:span text:style-name="T141">}</text:span> # OK</text:p> - <text:p text:style-name="P75">The user<text:span text:style-name="T222">'</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="P154">SPACY <text:span text:style-name="T214">VAR</text:span> = Whew! </text:p> + <text:p text:style-name="P154"><text:span text:style-name="T214">MESSAGE</text:span> = He said: $SPACY VAR <text:s text:c="2"/><text:span text:style-name="T214"># ERROR: missing option </text:span>"<text:span text:style-name="T214">SPACY</text:span>"</text:p> + <text:p text:style-name="P156">MESSAGE = <text:span text:style-name="T213">He said: </text:span><text:span text:style-name="T149">$</text:span><text:span text:style-name="T142">{</text:span><text:span text:style-name="T149">SPACY VAR</text:span><text:span text:style-name="T142">}</text:span> # OK</text:p> + <text:p text:style-name="P75">The user<text:span text:style-name="T223">'</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: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="P157"># model setup</text:p> - <text:p text:style-name="P245"><text:span text:style-name="T214">MODEL</text:span>_<text:span text:style-name="T214">DIR</text:span> = $HOME/<text:span text:style-name="T214">$MODEL_SUBDIR</text:span></text:p> + <text:p text:style-name="P245"><text:span text:style-name="T215">MODEL</text:span>_<text:span text:style-name="T215">DIR</text:span> = $HOME/<text:span text:style-name="T215">$MODEL_SUBDIR</text:span></text:p> <text:p text:style-name="P158"># user setup</text:p> <text:p text:style-name="P158">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="T215">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">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="T216">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> <text:p text:style-name="Preformatted_20_Text">SUBMODELS = $SUBMODELS jsbach</text:p> - <text:p text:style-name="P78">When <text:span text:style-name="T9">mkexp</text:span> tries to evaluate 'SUBMODELS', it sees that it needs to do an interpolation; but to do this interpolation, 'SUBMODELS' would need to have been evaluated already! So this results in</text:p> - <text:p text:style-name="Preformatted_20_Text"><text:soft-page-break/>Oops: interpolation loop detected in value "SUBMODELS" while reading key 'SUBMODELS'</text:p> + <text:p text:style-name="P78">When <text:span text:style-name="T9">mkexp</text:span> tries to evaluate 'SUBMODELS', it sees that it needs to do an <text:soft-page-break/>interpolation; but to do this interpolation, 'SUBMODELS' would need to have been evaluated already! So this results in</text:p> + <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="T50"> includes some special expressions, that are evaluated when interpolation occurs.</text:span></text:p> - <text:p text:style-name="P232"><text:span text:style-name="T9">variable</text:span><text:span text:style-name="T50"> = </text:span><text:span text:style-name="T133">eval(</text:span><text:span text:style-name="T9">expression</text:span><text:span text:style-name="T133">)</text:span><text:span text:style-name="T50"><text:line-break/></text:span><text:span text:style-name="T9">variable</text:span><text:span text:style-name="T50"> = </text:span><text:span text:style-name="T133">evals(</text:span><text:span text:style-name="T9">expression</text:span><text:span text:style-name="T133">)</text:span></text:p> - <text:p text:style-name="P228"><text:span text:style-name="T80">I</text:span><text:span text:style-name="T109">nterpret </text:span><text:span text:style-name="T41">expression</text:span><text:span text:style-name="T109"> as a valid Python expression and assign the result to </text:span><text:span text:style-name="T41">variable</text:span><text:span text:style-name="T109"> as a string. </text:span><text:span text:style-name="T108">The modules </text:span><text:span text:style-name="T264">'</text:span>os<text:span text:style-name="T264">'</text:span>, <text:span text:style-name="T264">'</text:span>re<text:span text:style-name="T264">'</text:span> and <text:span text:style-name="T264">'</text:span>time<text:span text:style-name="T264">'</text:span> <text:span text:style-name="T108">may be used in </text:span><text:span text:style-name="T40">expression</text:span><text:span text:style-name="T108">.</text:span></text:p> + <text:p text:style-name="P232"><text:span text:style-name="T9">variable</text:span><text:span text:style-name="T50"> = </text:span><text:span text:style-name="T134">eval(</text:span><text:span text:style-name="T9">expression</text:span><text:span text:style-name="T134">)</text:span><text:span text:style-name="T50"><text:line-break/></text:span><text:span text:style-name="T9">variable</text:span><text:span text:style-name="T50"> = </text:span><text:span text:style-name="T134">evals(</text:span><text:span text:style-name="T9">expression</text:span><text:span text:style-name="T134">)</text:span></text:p> + <text:p text:style-name="P228"><text:span text:style-name="T80">I</text:span><text:span text:style-name="T109">nterpret </text:span><text:span text:style-name="T41">expression</text:span><text:span text:style-name="T109"> as a valid Python expression and assign the result to </text:span><text:span text:style-name="T41">variable</text:span><text:span text:style-name="T109"> as a string. </text:span><text:span text:style-name="T108">The modules </text:span><text:span text:style-name="T265">'</text:span>os<text:span text:style-name="T265">'</text:span>, <text:span text:style-name="T265">'</text:span>re<text:span text:style-name="T265">'</text:span> and <text:span text:style-name="T265">'</text:span>time<text:span text:style-name="T265">'</text:span> <text:span text:style-name="T108">may be used in </text:span><text:span text:style-name="T40">expression</text:span><text:span text:style-name="T108">.</text:span></text:p> <text:p text:style-name="P212"><text:span text:style-name="T50">When the result is a list, </text:span><text:span text:style-name="T9">eval</text:span><text:span text:style-name="T50"> will return a list of strings, while </text:span><text:span text:style-name="T9">evals</text:span><text:span text:style-name="T50"> will return a single string, where elements are joined by a comma and a space.</text:span></text:p> <text:p text:style-name="P211"><text:span text:style-name="T50">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="T77">to a string containing a Python list expression</text:span><text:span text:style-name="T50">, and </text:span><text:span text:style-name="T77">then </text:span><text:span text:style-name="T50">use </text:span><text:span text:style-name="T9">eval</text:span><text:span text:style-name="T50"> </text:span><text:span text:style-name="T90">a</text:span><text:span text:style-name="T50">round the interpolation expression:</text:span></text:p> - <text:p text:style-name="P246">DATE_<text:span text:style-name="T223">STRING</text:span> = '[2010, 10, 20]' # need quotes here!</text:p> - <text:p text:style-name="P246">DATE_<text:span text:style-name="T223">LIST</text:span> = eval($DATE_<text:span text:style-name="T224">STRING</text:span>) # becomes a 3 element list</text:p> - <text:p text:style-name="P233">variable<text:span text:style-name="T50"> = </text:span><text:span text:style-name="T133">read(</text:span>file_name<text:span text:style-name="T133">)</text:span></text:p> + <text:p text:style-name="P246">DATE_<text:span text:style-name="T224">STRING</text:span> = '[2010, 10, 20]' # need quotes here!</text:p> + <text:p text:style-name="P246">DATE_<text:span text:style-name="T224">LIST</text:span> = eval($DATE_<text:span text:style-name="T225">STRING</text:span>) # becomes a 3 element list</text:p> + <text:p text:style-name="P233">variable<text:span text:style-name="T50"> = </text:span><text:span text:style-name="T134">read(</text:span>file_name<text:span text:style-name="T134">)</text:span></text:p> <text:p text:style-name="P205"><text:span text:style-name="T50">Read the contents of the file </text:span>file_name<text:span text:style-name="T50"> and assign its contents to </text:span>variable<text:span text:style-name="T50"> as a string.</text:span></text:p> - <text:p text:style-name="P234"><text:span text:style-name="T27">variable</text:span><text:span text:style-name="T78"> = </text:span><text:span text:style-name="T135">split_date(</text:span><text:span text:style-name="T27">timestamp</text:span><text:span text:style-name="T135">)</text:span></text:p> - <text:p text:style-name="P213"><text:span text:style-name="T216">T</text:span>ake <text:span text:style-name="T9">timestamp</text:span><text:span text:style-name="T50"> 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="T50"> </text:span><text:span text:style-name="T79">must have </text:span><text:span text:style-name="T50">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="T79">'; </text:span><text:span text:style-name="T50">trailing time elements </text:span><text:span text:style-name="T80">and their separators </text:span><text:span text:style-name="T79">are optional</text:span><text:span text:style-name="T50">; time zone indicator is not supported). </text:span><text:span text:style-name="T92">Unlike ISO, </text:span><text:span text:style-name="T31">split_date</text:span><text:span text:style-name="T92"> also</text:span><text:span text:style-name="T50"> </text:span><text:span text:style-name="T92">allows the date to be in the form YYYYMMDD</text:span><text:span text:style-name="T50">. </text:span><text:span text:style-name="T80">Unset fields default to zero.</text:span></text:p> - <text:p text:style-name="P235"><text:span text:style-name="T9">variable</text:span><text:span text:style-name="T50"> = </text:span><text:span text:style-name="T133">sec2time(</text:span><text:span text:style-name="T9">second_of_day</text:span><text:span text:style-name="T133">)</text:span></text:p> + <text:p text:style-name="P234"><text:span text:style-name="T27">variable</text:span><text:span text:style-name="T78"> = </text:span><text:span text:style-name="T136">split_date(</text:span><text:span text:style-name="T27">timestamp</text:span><text:span text:style-name="T136">)</text:span></text:p> + <text:p text:style-name="P213"><text:span text:style-name="T217">T</text:span>ake <text:span text:style-name="T9">timestamp</text:span><text:span text:style-name="T50"> 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="T50"> </text:span><text:span text:style-name="T79">must have </text:span><text:span text:style-name="T50">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="T79">'; </text:span><text:span text:style-name="T50">trailing time elements </text:span><text:span text:style-name="T80">and their separators </text:span><text:span text:style-name="T79">are optional</text:span><text:span text:style-name="T50">; time zone indicator is not supported). </text:span><text:span text:style-name="T92">Unlike ISO, </text:span><text:span text:style-name="T31">split_date</text:span><text:span text:style-name="T92"> also</text:span><text:span text:style-name="T50"> </text:span><text:span text:style-name="T92">allows the date to be in the form YYYYMMDD</text:span><text:span text:style-name="T50">. </text:span><text:span text:style-name="T80">Unset fields default to zero.</text:span></text:p> + <text:p text:style-name="P235"><text:span text:style-name="T9">variable</text:span><text:span text:style-name="T50"> = </text:span><text:span text:style-name="T134">sec2time(</text:span><text:span text:style-name="T9">second_of_day</text:span><text:span text:style-name="T134">)</text:span></text:p> <text:p text:style-name="P197">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="P236"><text:span text:style-name="T9">variable</text:span> = '<text:span text:style-name="T141">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="P236"><text:soft-page-break/><text:span text:style-name="T9">variable</text:span> = '<text:span text:style-name="T142">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="P214">Take integer <text:span text:style-name="T9">offset</text:span><text:span text:style-name="T50"> (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="T50"> and return the resulting date string.</text:span></text:p> - <text:p text:style-name="P237"><text:soft-page-break/><text:span text:style-name="T9">variable</text:span> = '<text:span text:style-name="T141">add_</text:span><text:span text:style-name="T149">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="P237"><text:span text:style-name="T9">variable</text:span> = '<text:span text:style-name="T142">add_</text:span><text:span text:style-name="T150">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="P215"><text:span text:style-name="T50">Take integer </text:span><text:span text:style-name="T9">offset</text:span><text:span text:style-name="T50"> (may be negative), add it to the </text:span><text:span text:style-name="T93">day</text:span><text:span text:style-name="T50"> portion of </text:span><text:span text:style-name="T9">datestamp</text:span><text:span text:style-name="T50"> and return the resulting date string. </text:span><text:span text:style-name="T93">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="T161">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="T162">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="Preformatted_20_Text">#! /bin/ksh</text:p> - <text:p text:style-name="Preformatted_20_Text"><text:span text:style-name="T162">#</text:span> This script was <text:span text:style-name="T162">crea</text:span>ted by %{NAME}</text:p> - <text:p text:style-name="P33">Here, the placehol<text:span text:style-name="T206">d</text:span>er requests the 'NAME' variable which was set to 'Joe User' in the example .config file <text:span text:style-name="T206">of section </text:span><text:span text:style-name="T206"><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="T206">configuration</text:span> and used to textually replace the placeholder expression, yield<text:span text:style-name="T206">ing</text:span> the final text:</text:p> + <text:p text:style-name="Preformatted_20_Text"><text:span text:style-name="T163">#</text:span> This script was <text:span text:style-name="T163">crea</text:span>ted by %{NAME}</text:p> + <text:p text:style-name="P33">Here, the placehol<text:span text:style-name="T207">d</text:span>er requests the 'NAME' variable which was set to 'Joe User' in the example .config file <text:span text:style-name="T207">of section </text:span><text:span text:style-name="T207"><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="T207">configuration</text:span> and used to textually replace the placeholder expression, yield<text:span text:style-name="T207">ing</text:span> the final text:</text:p> <text:p text:style-name="P123">#! /bin/ksh</text:p> - <text:p text:style-name="P122"><text:span text:style-name="T163"># </text:span>This script was <text:span text:style-name="T163">crea</text:span>ted by <text:span text:style-name="T161">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="T165">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> - <text:p text:style-name="Preformatted_20_Text"><text:soft-page-break/># %{section1.description}</text:p> + <text:p text:style-name="P122"><text:span text:style-name="T164"># </text:span>This script was <text:span text:style-name="T164">crea</text:span>ted by <text:span text:style-name="T162">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="T166">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 <text:soft-page-break/>name, using '.' as separator, as in</text:p> + <text:p text:style-name="Preformatted_20_Text"># %{section1.description}</text:p> <text:p text:style-name="P26">This is also used for nested sections:</text:p> - <text:p text:style-name="Preformatted_20_Text"># %{section1.s<text:span text:style-name="T163">ubs</text:span>ection1a.description}</text:p> - <text:p text:style-name="P27">For section names that contain a '.' or spaces (like 'namelist.echam' in the introductory example), instead of the '.' separator, the section name is given as a quoted string in brackets (similar to <text:span text:style-name="T206">Python's dictionary</text:span> syntax):</text:p> + <text:p text:style-name="Preformatted_20_Text"># %{section1.s<text:span text:style-name="T164">ubs</text:span>ection1a.description}</text:p> + <text:p text:style-name="P27">For section names that contain a '.' or spaces (like 'namelist.echam' in the introductory example), instead of the '.' separator, the section name is given as a quoted string in brackets (similar to <text:span text:style-name="T207">Python's dictionary</text:span> syntax):</text:p> <text:p text:style-name="Preformatted_20_Text">IS_AMIP_RUN=%{namelists['namelist.echam'].runctl.lamip}</text:p> <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2552_1114405012"/>Expressions<text:bookmark-end text:name="__RefHeading__2552_1114405012"/></text:h> - <text:p text:style-name="P26">The placeholders may <text:span text:style-name="T164">also contain more complex expressions, using a limited set of operations that is defined in the </text:span><text:span text:style-name="T13">Jinja</text:span><text:span text:style-name="T164"> documentation. Among these are</text:span></text:p> + <text:p text:style-name="P26">The placeholders may <text:span text:style-name="T165">also contain more complex expressions, using a limited set of operations that is defined in the </text:span><text:span text:style-name="T13">Jinja</text:span><text:span text:style-name="T165"> documentation. Among these are</text:span></text:p> <text:p text:style-name="Preformatted_20_Text">LITERAL_STRING=%{'hello'}</text:p> <text:p text:style-name="Preformatted_20_Text">LITERAL_INTEGER=%{42}</text:p> <text:p text:style-name="Preformatted_20_Text">LITERAL_FLOAT=%{21.5}</text:p> <text:p text:style-name="Preformatted_20_Text">LITERAL_LIST=%{['hello', 42, 21.5]}</text:p> <text:p text:style-name="Preformatted_20_Text">LITERAL_BOOLEANS=%{false} <text:s/># Always lower-case!</text:p> <text:p text:style-name="Preformatted_20_Text">ARITHMETIC=%{2 + 2 * 2 – 2 / 2} <text:s/># is 5</text:p> - <text:p text:style-name="Preformatted_20_Text">STRING_TOGETHER=%{NAME ~ ', employee number ' ~ 42} <text:s/># Converts <text:span text:style-name="T165">42</text:span> to string</text:p> + <text:p text:style-name="Preformatted_20_Text">STRING_TOGETHER=%{NAME ~ ', employee number ' ~ 42} <text:s/># Converts <text:span text:style-name="T166">42</text:span> to string</text:p> <text:p text:style-name="P125">LIST_ELEMENT=%{PATH[0]} <text:s/># indices start with 0</text:p> <text:p text:style-name="P125">LIST_SUBLIST=%{PATH[1:3]}</text:p> - <text:p text:style-name="Preformatted_20_Text">FILTERED_STRING=%{NAME | <text:span text:style-name="T165">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="T177">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="T239">Besides, </text:span><text:span text:style-name="T9">mkexp</text:span> defines <text:s/><text:span text:style-name="T242">a number of </text:span>additional filters:</text:p> - <text:p text:style-name="P238">split<text:span text:style-name="T171">(</text:span><text:span text:style-name="T45">s</text:span><text:span text:style-name="T136">, </text:span><text:span text:style-name="T45">m</text:span><text:span text:style-name="T136">=-1)</text:span></text:p> - <text:p text:style-name="P198">cuts <text:span text:style-name="T241">the input </text:span>string <text:span text:style-name="T241">at all occurrences of </text:span><text:span text:style-name="T34">s</text:span><text:span text:style-name="T241">, returning</text:span> a list of substrings. <text:span text:style-name="T240">If </text:span><text:span text:style-name="T33">m</text:span><text:span text:style-name="T240"> 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="T240"> 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="T141">split</text:span><text:span text:style-name="T171">(' ') }<text:tab/><text:tab/>→</text:span><text:span text:style-name="T174"> </text:span><text:span text:style-name="T173">['A', 'B', 'C']</text:span></text:p> - <text:p text:style-name="P249"><text:span text:style-name="T173">%{ 'A B C' | split(' ', </text:span><text:span text:style-name="T151">1</text:span><text:span text:style-name="T173">) } <text:tab/></text:span><text:span text:style-name="T174">→ </text:span><text:span text:style-name="T173">['A', </text:span><text:span text:style-name="T151">'B C'</text:span><text:span text:style-name="T173">]</text:span></text:p> + <text:p text:style-name="Preformatted_20_Text">FILTERED_STRING=%{NAME | <text:span text:style-name="T166">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="T178">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="T240">Besides, </text:span><text:span text:style-name="T9">mkexp</text:span> defines <text:s/><text:span text:style-name="T243">a number of </text:span>additional filters:</text:p> + <text:p text:style-name="P238">split<text:span text:style-name="T172">(</text:span><text:span text:style-name="T45">s</text:span><text:span text:style-name="T137">, </text:span><text:span text:style-name="T45">m</text:span><text:span text:style-name="T137">=-1)</text:span></text:p> + <text:p text:style-name="P198">cuts <text:span text:style-name="T242">the input </text:span>string <text:span text:style-name="T242">at all occurrences of </text:span><text:span text:style-name="T34">s</text:span><text:span text:style-name="T242">, returning</text:span> a list of substrings. <text:span text:style-name="T241">If </text:span><text:span text:style-name="T33">m</text:span><text:span text:style-name="T241"> 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="T241"> 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="T142">split</text:span><text:span text:style-name="T172">(' ') }<text:tab/><text:tab/>→</text:span><text:span text:style-name="T175"> </text:span><text:span text:style-name="T174">['A', 'B', 'C']</text:span></text:p> + <text:p text:style-name="P249"><text:span text:style-name="T174">%{ 'A B C' | split(' ', </text:span><text:span text:style-name="T152">1</text:span><text:span text:style-name="T174">) } <text:tab/></text:span><text:span text:style-name="T175">→ </text:span><text:span text:style-name="T174">['A', </text:span><text:span text:style-name="T152">'B C'</text:span><text:span text:style-name="T174">]</text:span></text:p> <text:p text:style-name="P217"/> - <text:p text:style-name="P119">filter<text:span text:style-name="T171">()</text:span></text:p> - <text:p text:style-name="P218">removes empty elements from <text:span text:style-name="T241">the input</text:span> list:</text:p> - <text:p text:style-name="P250"><text:soft-page-break/><text:span text:style-name="T173">%{ ['A', '', 'C'] | </text:span><text:span text:style-name="T151">filter</text:span><text:span text:style-name="T173">() }<text:tab/>→</text:span><text:span text:style-name="T171"> ['A', 'C']</text:span></text:p> - <text:p text:style-name="P239">match<text:span text:style-name="T171">(</text:span><text:span text:style-name="T45">regexp</text:span><text:span text:style-name="T171">, </text:span><text:span text:style-name="T45">default</text:span><text:span text:style-name="T171">='')</text:span></text:p> - <text:p text:style-name="P219"><text:span text:style-name="T171">returns the input string</text:span><text:span text:style-name="T136">, if </text:span><text:span text:style-name="T45">regexp</text:span><text:span text:style-name="T136"> matches somewhere in it. If </text:span><text:span text:style-name="T45">regexp</text:span><text:span text:style-name="T136"> 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="T45">default</text:span><text:span text:style-name="T136"> string is returned:</text:span></text:p> - <text:p text:style-name="P250"><text:span text:style-name="T136">%{ 'Douglas Adams' | </text:span><text:span text:style-name="T133">match</text:span><text:span text:style-name="T136">('Adam') }<text:tab/><text:tab/>→ 'Douglas Adams'</text:span></text:p> - <text:p text:style-name="P250"><text:span text:style-name="T136">%{ 'Douglas Adams' | match(</text:span><text:span text:style-name="T133">'Eve'</text:span><text:span text:style-name="T136">) }<text:tab/><text:tab/>→ ''</text:span></text:p> - <text:p text:style-name="P250"><text:span text:style-name="T136">%{ 'Douglas Adams' | match('Abel', </text:span><text:span text:style-name="T133">'Cain'</text:span><text:span text:style-name="T136">) }<text:tab/>→ 'Cain'</text:span></text:p> - <text:p text:style-name="P250"><text:span text:style-name="T136">%{ 'Douglas Adams' | match('l</text:span><text:span text:style-name="T133">(.*)</text:span><text:span text:style-name="T136">m') }<text:tab/><text:tab/>→ 'as Ada'</text:span></text:p> - <text:p text:style-name="P241"><text:span text:style-name="T133">wordwrap</text:span><text:span text:style-name="T136">(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="P221"><text:span text:style-name="T136">replaces the </text:span><text:span text:style-name="T137">builtin </text:span><text:span text:style-name="T46">Jinja </text:span><text:span text:style-name="T137">filter 'wordwrap' <text:s/>by a private version that allows to suppress breaks on hyphens:</text:span></text:p> - <text:p text:style-name="P247">%{'long-hyphenated-text'|<text:span text:style-name="T141">wordwrap</text:span>(15, false)}</text:p> - <text:p text:style-name="P251"><text:span text:style-name="T137">→</text:span><text:span text:style-name="T136"> 'long- </text:span></text:p> + <text:p text:style-name="P119">filter<text:span text:style-name="T172">()</text:span></text:p> + <text:p text:style-name="P218">removes empty elements from <text:span text:style-name="T242">the input</text:span> list:</text:p> + <text:p text:style-name="P250"><text:soft-page-break/><text:span text:style-name="T174">%{ ['A', '', 'C'] | </text:span><text:span text:style-name="T152">filter</text:span><text:span text:style-name="T174">() }<text:tab/>→</text:span><text:span text:style-name="T172"> ['A', 'C']</text:span></text:p> + <text:p text:style-name="P239">match<text:span text:style-name="T172">(</text:span><text:span text:style-name="T45">regexp</text:span><text:span text:style-name="T172">, </text:span><text:span text:style-name="T45">default</text:span><text:span text:style-name="T172">='')</text:span></text:p> + <text:p text:style-name="P219"><text:span text:style-name="T172">returns the input string</text:span><text:span text:style-name="T137">, if </text:span><text:span text:style-name="T45">regexp</text:span><text:span text:style-name="T137"> matches somewhere in it. If </text:span><text:span text:style-name="T45">regexp</text:span><text:span text:style-name="T137"> 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="T45">default</text:span><text:span text:style-name="T137"> string is returned:</text:span></text:p> + <text:p text:style-name="P250"><text:span text:style-name="T137">%{ 'Douglas Adams' | </text:span><text:span text:style-name="T134">match</text:span><text:span text:style-name="T137">('Adam') }<text:tab/><text:tab/>→ 'Douglas Adams'</text:span></text:p> + <text:p text:style-name="P250"><text:span text:style-name="T137">%{ 'Douglas Adams' | match(</text:span><text:span text:style-name="T134">'Eve'</text:span><text:span text:style-name="T137">) }<text:tab/><text:tab/>→ ''</text:span></text:p> + <text:p text:style-name="P250"><text:span text:style-name="T137">%{ 'Douglas Adams' | match('Abel', </text:span><text:span text:style-name="T134">'Cain'</text:span><text:span text:style-name="T137">) }<text:tab/>→ 'Cain'</text:span></text:p> + <text:p text:style-name="P250"><text:span text:style-name="T137">%{ 'Douglas Adams' | match('l</text:span><text:span text:style-name="T134">(.*)</text:span><text:span text:style-name="T137">m') }<text:tab/><text:tab/>→ 'as Ada'</text:span></text:p> + <text:p text:style-name="P241"><text:span text:style-name="T134">wordwrap</text:span><text:span text:style-name="T137">(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="P221"><text:span text:style-name="T137">replaces the </text:span><text:span text:style-name="T138">builtin </text:span><text:span text:style-name="T46">Jinja </text:span><text:span text:style-name="T138">filter 'wordwrap' <text:s/>by a private version that allows to suppress breaks on hyphens:</text:span></text:p> + <text:p text:style-name="P247">%{'long-hyphenated-text'|<text:span text:style-name="T142">wordwrap</text:span>(15, false)}</text:p> + <text:p text:style-name="P251"><text:span text:style-name="T138">→</text:span><text:span text:style-name="T137"> 'long- </text:span></text:p> <text:p text:style-name="P248"><text:s text:c="3"/>hyphenated-text'</text:p> <text:p text:style-name="P251"/> - <text:p text:style-name="P247">%{'long-hyphenated-text'|wordwrap(15, false, <text:span text:style-name="T141">false</text:span>)} </text:p> - <text:p text:style-name="P251"><text:span text:style-name="T137">→</text:span><text:span text:style-name="T136"> 'long-</text:span><text:span text:style-name="T137">hyphenated-text'</text:span></text:p> + <text:p text:style-name="P247">%{'long-hyphenated-text'|wordwrap(15, false, <text:span text:style-name="T142">false</text:span>)} </text:p> + <text:p text:style-name="P251"><text:span text:style-name="T138">→</text:span><text:span text:style-name="T137"> 'long-</text:span><text:span text:style-name="T138">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="T225">i.e. lines </text:span>beginning with '#%'. <text:span text:style-name="T225">They </text:span>start with '#% for … <text:span text:style-name="T168">in …:</text:span>' and end in '#% endfor':</text:p> - <text:p text:style-name="Preformatted_20_Text"><text:span text:style-name="T141">#% for</text:span> countdown <text:span text:style-name="T141">in</text:span> [3, 2, 1, '<text:span text:style-name="T225">liftoff</text:span>']<text:span text:style-name="T141">:</text:span></text:p> + <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="T226">i.e. lines </text:span>beginning with '#%'. <text:span text:style-name="T226">They </text:span>start with '#% for … <text:span text:style-name="T169">in …:</text:span>' and end in '#% endfor':</text:p> + <text:p text:style-name="Preformatted_20_Text"><text:span text:style-name="T142">#% for</text:span> countdown <text:span text:style-name="T142">in</text:span> [3, 2, 1, '<text:span text:style-name="T226">liftoff</text:span>']<text:span text:style-name="T142">:</text:span></text:p> <text:p text:style-name="Preformatted_20_Text">echo %{countdown}</text:p> <text:p text:style-name="P111">#% endfor</text:p> - <text:p text:style-name="P28">will <text:span text:style-name="T166">be expanded by </text:span><text:span text:style-name="T30">mkexp</text:span><text:span text:style-name="T166"> to </text:span>yield</text:p> + <text:p text:style-name="P28">will <text:span text:style-name="T167">be expanded by </text:span><text:span text:style-name="T30">mkexp</text:span><text:span text:style-name="T167"> 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">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="T225">liftoff</text:span></text:p> - <text:p text:style-name="P31"><text:span text:style-name="T168">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="T168">and the size of a list is queried with the 'length' filter</text:span>.</text:p> - <text:p text:style-name="P124"><text:soft-page-break/>#% for index in <text:span text:style-name="T141">range(1, </text:span><text:span text:style-name="T144">PATH|length()</text:span><text:span text:style-name="T141">)</text:span> <text:s/><text:span text:style-name="T168"># PATH was defined in </text:span><text:span text:style-name="T168"><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="T168">echo</text:span> %<text:span text:style-name="T169">{index}: </text:span>%{<text:span text:style-name="T168">PATH[</text:span>index<text:span text:style-name="T168">]</text:span>} <text:s/></text:p> + <text:p text:style-name="Preformatted_20_Text">echo <text:span text:style-name="T226">liftoff</text:span></text:p> + <text:p text:style-name="P31"><text:span text:style-name="T169">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="T169">and the size of a list is queried with the 'length' filter</text:span>.</text:p> + <text:p text:style-name="P124"><text:soft-page-break/>#% for index in <text:span text:style-name="T142">range(1, </text:span><text:span text:style-name="T145">PATH|length()</text:span><text:span text:style-name="T142">)</text:span> <text:s/><text:span text:style-name="T169"># PATH was defined in </text:span><text:span text:style-name="T169"><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="T169">echo</text:span> %<text:span text:style-name="T170">{index}: </text:span>%{<text:span text:style-name="T169">PATH[</text:span>index<text:span text:style-name="T169">]</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="T167">indexing of lists starts at 0,</text:span> <text:span text:style-name="T167">i.e. the first element of the PATH list is skipped. Besides, </text:span>the stop index <text:span text:style-name="T169">is</text:span> not included, i.e. <text:span text:style-name="T168">as PATH has a length of 3, </text:span>the last looping has index <text:span text:style-name="T167">2</text:span>:</text:p> - <text:p text:style-name="Preformatted_20_Text">echo <text:span text:style-name="T169">1: </text:span>/usr/bin </text:p> - <text:p text:style-name="Preformatted_20_Text">echo <text:span text:style-name="T169">2: </text:span>/usr/local/bin </text:p> - <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2556_1114405012"/>Condition<text:span text:style-name="T166">s</text:span><text:bookmark-end text:name="__RefHeading__2556_1114405012"/></text:h> - <text:p text:style-name="P29">A template may contain alternative parts <text:span text:style-name="T169">that are selected depending on the .config data</text:span>, <text:span text:style-name="T169">similar to an 'if' statement. This is useful for e.g. skipping certain parts of the script template that are not applicable to runs of a given resolution but required for others. They are also implemented as structured comments, starting with '#% if …:' and ending in '#% endif', with optional '#% elif …:' and '#% else:' parts.</text:span></text:p> - <text:p text:style-name="P30"><text:span text:style-name="T169">For testing, you may use expressions with comparisons (==, !=, >, >=, <, <=), querying a certain list element (… in …), and logical operators (and, or, not). Sub-expressions may be parenthesized to change the order of evaluation. Besides, </text:span><text:span text:style-name="T14">Jinja</text:span><text:span text:style-name="T169"> provides a number of named tests that use the '… is …' Syntax.</text:span></text:p> - <text:p text:style-name="Preformatted_20_Text"><text:span text:style-name="T141">#% if </text:span><text:span text:style-name="T172">PATH|length()</text:span><text:span text:style-name="T170"> </text:span><text:span text:style-name="T145">is divisibleby 3:</text:span></text:p> + <text:p text:style-name="Text_20_body">Note that <text:span text:style-name="T168">indexing of lists starts at 0,</text:span> <text:span text:style-name="T168">i.e. the first element of the PATH list is skipped. Besides, </text:span>the stop index <text:span text:style-name="T170">is</text:span> not included, i.e. <text:span text:style-name="T169">as PATH has a length of 3, </text:span>the last looping has index <text:span text:style-name="T168">2</text:span>:</text:p> + <text:p text:style-name="Preformatted_20_Text">echo <text:span text:style-name="T170">1: </text:span>/usr/bin </text:p> + <text:p text:style-name="Preformatted_20_Text">echo <text:span text:style-name="T170">2: </text:span>/usr/local/bin </text:p> + <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2556_1114405012"/>Condition<text:span text:style-name="T167">s</text:span><text:bookmark-end text:name="__RefHeading__2556_1114405012"/></text:h> + <text:p text:style-name="P29">A template may contain alternative parts <text:span text:style-name="T170">that are selected depending on the .config data</text:span>, <text:span text:style-name="T170">similar to an 'if' statement. This is useful for e.g. skipping certain parts of the script template that are not applicable to runs of a given resolution but required for others. They are also implemented as structured comments, starting with '#% if …:' and ending in '#% endif', with optional '#% elif …:' and '#% else:' parts.</text:span></text:p> + <text:p text:style-name="P30"><text:span text:style-name="T170">For testing, you may use expressions with comparisons (==, !=, >, >=, <, <=), querying a certain list element (… in …), and logical operators (and, or, not). Sub-expressions may be parenthesized to change the order of evaluation. Besides, </text:span><text:span text:style-name="T14">Jinja</text:span><text:span text:style-name="T170"> provides a number of named tests that use the '… is …' Syntax.</text:span></text:p> + <text:p text:style-name="Preformatted_20_Text"><text:span text:style-name="T142">#% if </text:span><text:span text:style-name="T173">PATH|length()</text:span><text:span text:style-name="T171"> </text:span><text:span text:style-name="T146">is divisibleby 3:</text:span></text:p> <text:p text:style-name="P140">diff3 %{PATH[:3]|join(' ')}</text:p> - <text:p text:style-name="P114">#% elif <text:span text:style-name="T172">PATH|length()</text:span> is even:</text:p> + <text:p text:style-name="P114">#% elif <text:span text:style-name="T173">PATH|length()</text:span> is even:</text:p> <text:p text:style-name="P125">diff %{PATH[:2]|join(' ')}</text:p> <text:p text:style-name="P111">#% else:</text:p> - <text:p text:style-name="Preformatted_20_Text">echo <text:span text:style-name="T175">cannot handle PATH</text:span></text:p> + <text:p text:style-name="Preformatted_20_Text">echo <text:span text:style-name="T176">cannot handle PATH</text:span></text:p> <text:p text:style-name="P111">#% endif</text:p> <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="T169"><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="T176"> documentation.</text:span></text:p> + <text:p text:style-name="P30"><text:span text:style-name="T170"><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="T177"> 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: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="T226">'#%</text:span>#':</text:p> + <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="T227">'#%</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 one will not make it <text:span text:style-name="T185">and is for template documentation only</text:span></text:p> + <text:p text:style-name="Preformatted_20_Text">#%# This one will not make it <text:span text:style-name="T186">and is for template documentation only</text:span></text:p> <text:h text:style-name="P274" text:outline-level="3">Block statements and block comments</text:h> <text:p text:style-name="P96">For templates that contain more <text:span text:style-name="T9">Jinja</text:span><text:span text:style-name="T50"> code than actual output lines, a variant of the standard </text:span><text:span text:style-name="T9">Jinja </text:span><text:span text:style-name="T50">block synta</text:span><text:span text:style-name="T106">x i</text:span><text:span text:style-name="T50">s available for both statements and comments</text:span><text:span text:style-name="T50"><text:note text:id="ftn1" text:note-class="footnote"><text:note-citation>1</text:note-citation><text:note-body> - <text:p text:style-name="P286">The standard <text:span text:style-name="T9">Jinja</text:span><text:span text:style-name="T50"> comment syntax '{#' collides with the Bourne shell idiom for variable size, '$â </text:span><text:span text:style-name="T139">{#</text:span><text:span text:style-name="T136">var</text:span><text:span text:style-name="T50">}'. </text:span><text:span text:style-name="T106">Standard b</text:span><text:span text:style-name="T50">lock statement syntax '{%' gives problems when </text:span><text:span text:style-name="T106">mkexp </text:span><text:span text:style-name="T50">template variables </text:span><text:span text:style-name="T106">'%{var}' </text:span><text:span text:style-name="T50">are used </text:span><text:span text:style-name="T106">in</text:span><text:span text:style-name="T50"> shell variable </text:span><text:span text:style-name="T106">expansions</text:span><text:span text:style-name="T50">, like '$</text:span><text:span text:style-name="T139">{%</text:span><text:span text:style-name="T50">{</text:span><text:span text:style-name="T106">var}:-default}'</text:span></text:p></text:note-body></text:note></text:span><text:span text:style-name="T50">. Block statements begin with '{%__mkexp__' and end with '%}', block comments begin with '{#__mkexp__' and end with '#}'.</text:span></text:p> + <text:p text:style-name="P286">The standard <text:span text:style-name="T9">Jinja</text:span><text:span text:style-name="T50"> comment syntax '{#' collides with the Bourne shell idiom for variable size, '$â </text:span><text:span text:style-name="T140">{#</text:span><text:span text:style-name="T137">var</text:span><text:span text:style-name="T50">}'. </text:span><text:span text:style-name="T106">Standard b</text:span><text:span text:style-name="T50">lock statement syntax '{%' gives problems when </text:span><text:span text:style-name="T106">mkexp </text:span><text:span text:style-name="T50">template variables </text:span><text:span text:style-name="T106">'%{var}' </text:span><text:span text:style-name="T50">are used </text:span><text:span text:style-name="T106">in</text:span><text:span text:style-name="T50"> shell variable </text:span><text:span text:style-name="T106">expansions</text:span><text:span text:style-name="T50">, like '$</text:span><text:span text:style-name="T140">{%</text:span><text:span text:style-name="T50">{</text:span><text:span text:style-name="T106">var}:-default}'</text:span></text:p></text:note-body></text:note></text:span><text:span text:style-name="T50">. Block statements begin with '{%__mkexp__' and end with '%}', block comments begin with '{#__mkexp__' and end with '#}'.</text:span></text:p> <text:h text:style-name="P285" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__2560_1114405012"/>Standard experiment<text:span text:style-name="T48">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> <text:p text:style-name="P10"><text:span text:style-name="T8">The definition of a standard experiment type </text:span><text:span text:style-name="T10">typename</text:span><text:span text:style-name="T8"> may consist of a configuration in </text:span><text:span text:style-name="T10">typename</text:span><text:span text:style-name="T8">.config and a number of </text:span><text:span text:style-name="T10">typename</text:span><text:span text:style-name="T8">.</text:span><text:span text:style-name="T10">jobname</text:span><text:span text:style-name="T8">.tmpl files, one for each subsection </text:span><text:span text:style-name="T10">jobname</text:span><text:span text:style-name="T8"> of the jobs section. Before reading </text:span><text:span text:style-name="T10">typename</text:span><text:span text:style-name="T8">.config, the special DEFAULT.config is loaded, containing the model default settings. Both .config and .tmpl files may be missing; the default is to read only DEFAULT.config or the corresponding DEFAULT.</text:span><text:span text:style-name="T10">jobname</text:span><text:span text:style-name="T8">.tmpl file instead.</text:span></text:p> @@ -2684,20 +2707,20 @@ <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"><text:soft-page-break/>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="P273" text:outline-level="3"><text:span text:style-name="T246">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="T245">for all experiments that use a given </text:span>model configuration. <text:span text:style-name="T245">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:h text:style-name="P273" text:outline-level="3"><text:span text:style-name="T247">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="T246">for all experiments that use a given </text:span>model configuration. <text:span text:style-name="T246">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="P282" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__1508_1711940803"/>Generating <text:span text:style-name="T193">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="T181"> </text:span>running <text:span text:style-name="T9">mkexp</text:span><text:span text:style-name="T110">, </text:span><text:span text:style-name="T111">the special configuration section [jobs]</text:span><text:span text:style-name="T43"> </text:span><text:span text:style-name="T111">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="P141"># <text:span text:style-name="T182">model setup: experiment type 'control'</text:span></text:p> + <text:h text:style-name="P282" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__1508_1711940803"/>Generating <text:span text:style-name="T194">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="T182"> </text:span>running <text:span text:style-name="T9">mkexp</text:span><text:span text:style-name="T111">, </text:span><text:span text:style-name="T112">the special configuration section [jobs]</text:span><text:span text:style-name="T43"> </text:span><text:span text:style-name="T112">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="P141"># <text:span text:style-name="T183">model setup: experiment type 'control'</text:span></text:p> <text:p text:style-name="P128">[jobs]</text:p> <text:p text:style-name="P128"><text:s text:c="2"/>[[pre]]</text:p> <text:p text:style-name="P128"><text:s text:c="2"/>[[run]]</text:p> <text:p text:style-name="P128"><text:s text:c="2"/>[[post]]</text:p> - <text:p text:style-name="P43"><text:span text:style-name="T111">For each of </text:span><text:span text:style-name="T113">the jobs defined in the model setup above</text:span><text:span text:style-name="T111">, there </text:span><text:span text:style-name="T113">must</text:span><text:span text:style-name="T111"> be a template file in the model setup, </text:span><text:span text:style-name="T113">e.g. for [[run]] </text:span><text:span text:style-name="T111">either as 'control.run.tmpl' or 'DEFAULT.run.tmpl'. </text:span><text:span text:style-name="T112">The corresponding</text:span><text:span text:style-name="T111"> file is expanded to its final form using the </text:span><text:span text:style-name="T112">full</text:span><text:span text:style-name="T111"> experiment configuration, </text:span><text:span text:style-name="T112">as described before</text:span><text:span text:style-name="T111">. Besides, the </text:span><text:span text:style-name="T112">job specific </text:span><text:span text:style-name="T111">variable</text:span><text:span text:style-name="T112">s</text:span><text:span text:style-name="T111"> </text:span><text:span text:style-name="T112">are set and passed according to their respective template</text:span><text:span text:style-name="T111">.</text:span></text:p> - <text:p text:style-name="P43"><text:span text:style-name="T114">The resulting job scripts are </text:span><text:span text:style-name="T113">written to the directory defined by SCRIPT_DIR, </text:span><text:span text:style-name="T114">e.g. </text:span><text:span text:style-name="T113">as </text:span><text:soft-page-break/><text:span text:style-name="T113">'joe1234.run', </text:span><text:span text:style-name="T114">and marked as being executable. </text:span><text:span text:style-name="T120">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="T123">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="T114">C</text:span><text:span text:style-name="T110">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="T111">U</text:span><text:span text:style-name="T110">sually, the job list is defined in the model setup. The user may chose to add </text:span><text:span text:style-name="T116">jobs </text:span><text:span text:style-name="T110">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="T116">is</text:span><text:span text:style-name="T110"> defined in the [jobs] section and contains a list of the jobs to be suppressed.</text:span></text:p> + <text:p text:style-name="P43"><text:span text:style-name="T112">For each of </text:span><text:span text:style-name="T114">the jobs defined in the model setup above</text:span><text:span text:style-name="T112">, there </text:span><text:span text:style-name="T114">must</text:span><text:span text:style-name="T112"> be a template file in the model setup, </text:span><text:span text:style-name="T114">e.g. for [[run]] </text:span><text:span text:style-name="T112">either as 'control.run.tmpl' or 'DEFAULT.run.tmpl'. </text:span><text:span text:style-name="T113">The corresponding</text:span><text:span text:style-name="T112"> file is expanded to its final form using the </text:span><text:span text:style-name="T113">full</text:span><text:span text:style-name="T112"> experiment configuration, </text:span><text:span text:style-name="T113">as described before</text:span><text:span text:style-name="T112">. Besides, the </text:span><text:span text:style-name="T113">job specific </text:span><text:span text:style-name="T112">variable</text:span><text:span text:style-name="T113">s</text:span><text:span text:style-name="T112"> </text:span><text:span text:style-name="T113">are set and passed according to their respective template</text:span><text:span text:style-name="T112">.</text:span></text:p> + <text:p text:style-name="P43"><text:span text:style-name="T115">The resulting job scripts are </text:span><text:span text:style-name="T114">written to the directory defined by SCRIPT_DIR, </text:span><text:span text:style-name="T115">e.g. </text:span><text:span text:style-name="T114">as </text:span><text:soft-page-break/><text:span text:style-name="T114">'joe1234.run', </text:span><text:span text:style-name="T115">and marked as being executable. </text:span><text:span text:style-name="T121">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="T124">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="T115">C</text:span><text:span text:style-name="T111">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="T112">U</text:span><text:span text:style-name="T111">sually, the job list is defined in the model setup. The user may chose to add </text:span><text:span text:style-name="T117">jobs </text:span><text:span text:style-name="T111">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="T117">is</text:span><text:span text:style-name="T111"> defined in the [jobs] section and contains a list of the jobs to be suppressed.</text:span></text:p> <text:p text:style-name="P128"># joe1234.config</text:p> <text:p text:style-name="P128">EXP_TYPE = control</text:p> <text:p text:style-name="P128">[jobs]</text:p> @@ -2705,12 +2728,12 @@ <text:p text:style-name="P128"><text:s text:c="2"/>[[my_pre]]</text:p> <text:p text:style-name="P128"><text:s text:c="2"/>[[my_post]]</text:p> <text:p text:style-name="P49">This way, the 'pre' and 'post' jobs will not be created in favor of two new jobs, 'my_pre' and 'my_post'. In this case, the user setup must provide two templates 'joe1234.my_pre.tmpl' and 'joe1234.my_post.tmpl', together with the .config file.</text:p> - <text:p text:style-name="P45">Alternatively, you may want to introduce a new 'my_p<text:span text:style-name="T183">ost</text:span>' job, that is basically the same as the old 'p<text:span text:style-name="T183">ost</text:span>' job but uses a slightly different configuration. This may be done using the special section variable '.extends'.</text:p> + <text:p text:style-name="P45">Alternatively, you may want to introduce a new 'my_p<text:span text:style-name="T184">ost</text:span>' job, that is basically the same as the old 'p<text:span text:style-name="T184">ost</text:span>' job but uses a slightly different configuration. This may be done using the special section variable '.extends'.</text:p> <text:p text:style-name="P128">[jobs]</text:p> - <text:p text:style-name="P142"><text:span text:style-name="T110"><text:s text:c="2"/>[[my_p</text:span><text:span text:style-name="T115">ost</text:span><text:span text:style-name="T110">]]</text:span></text:p> - <text:p text:style-name="P142"><text:span text:style-name="T110"><text:s text:c="4"/>.</text:span><text:span text:style-name="T114">extends</text:span><text:span text:style-name="T110"> = p</text:span><text:span text:style-name="T115">ost</text:span></text:p> + <text:p text:style-name="P142"><text:span text:style-name="T111"><text:s text:c="2"/>[[my_p</text:span><text:span text:style-name="T116">ost</text:span><text:span text:style-name="T111">]]</text:span></text:p> + <text:p text:style-name="P142"><text:span text:style-name="T111"><text:s text:c="4"/>.</text:span><text:span text:style-name="T115">extends</text:span><text:span text:style-name="T111"> = p</text:span><text:span text:style-name="T116">ost</text:span></text:p> <text:p text:style-name="P129"><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="T184">made available </text:span>to <text:span text:style-name="T184">the template via the</text:span> 'JOB' dictionary.</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="T185">made available </text:span>to <text:span text:style-name="T185">the template via the</text:span> 'JOB' dictionary.</text:p> <text:h text:style-name="P264" 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="P177">tasks</text:p> @@ -2725,17 +2748,17 @@ <text:p text:style-name="P103"><text:s text:c="2"/>[[namelist.jsbach]]</text:p> <text:p text:style-name="P103"><text:s text:c="4"/>[[[jsbach_ctl]]]</text:p> <text:p text:style-name="P103"><text:s text:c="6"/>use_dynveg = false</text:p> - <text:p text:style-name="P46"><text:span text:style-name="T110">If – for some reason – your experiments needs 'use_dynveg' set to 'true' for the first year only, you may create an additional 'run_first' job, </text:span><text:span text:style-name="T116">with a job specific namelists subsection that – apart from the addition</text:span><text:span text:style-name="T118">al</text:span><text:span text:style-name="T116"> brackets – has the same structure as</text:span><text:span text:style-name="T110"> </text:span><text:span text:style-name="T116">the global namelists section.</text:span></text:p> + <text:p text:style-name="P46"><text:span text:style-name="T111">If – for some reason – your experiments needs 'use_dynveg' set to 'true' for the first year only, you may create an additional 'run_first' job, </text:span><text:span text:style-name="T117">with a job specific namelists subsection that – apart from the addition</text:span><text:span text:style-name="T119">al</text:span><text:span text:style-name="T117"> brackets – has the same structure as</text:span><text:span text:style-name="T111"> </text:span><text:span text:style-name="T117">the global namelists section.</text:span></text:p> <text:p text:style-name="P143">[jobs]</text:p> <text:p text:style-name="P143"><text:s text:c="2"/>[[run_first]]</text:p> <text:p text:style-name="P143"><text:s text:c="4"/>.extends = run</text:p> - <text:p text:style-name="P143"><text:s text:c="4"/><text:span text:style-name="T141">[[[namelists]]</text:span><text:span text:style-name="T150">]</text:span></text:p> - <text:p text:style-name="P103"><text:s text:c="6"/><text:span text:style-name="T183">[[</text:span>[[namelist.jsbach]]<text:span text:style-name="T183">]]</text:span></text:p> - <text:p text:style-name="P103"><text:s text:c="8"/><text:span text:style-name="T183">[[</text:span>[[[jsbach_ctl]]]<text:span text:style-name="T183">]]</text:span></text:p> - <text:p text:style-name="P103"><text:span text:style-name="T110"><text:s text:c="10"/>use_dynveg = </text:span><text:span text:style-name="T115">true</text:span></text:p> - <text:p text:style-name="P46"><text:span text:style-name="T116">This</text:span><text:span text:style-name="T110"> 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:p text:style-name="P143"><text:s text:c="4"/><text:span text:style-name="T142">[[[namelists]]</text:span><text:span text:style-name="T151">]</text:span></text:p> + <text:p text:style-name="P103"><text:s text:c="6"/><text:span text:style-name="T184">[[</text:span>[[namelist.jsbach]]<text:span text:style-name="T184">]]</text:span></text:p> + <text:p text:style-name="P103"><text:s text:c="8"/><text:span text:style-name="T184">[[</text:span>[[[jsbach_ctl]]]<text:span text:style-name="T184">]]</text:span></text:p> + <text:p text:style-name="P103"><text:span text:style-name="T111"><text:s text:c="10"/>use_dynveg = </text:span><text:span text:style-name="T116">true</text:span></text:p> + <text:p text:style-name="P46"><text:span text:style-name="T117">This</text:span><text:span text:style-name="T111"> 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="P263" 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="T110">While the definition of .config variables may use</text:span><text:span text:style-name="T117"> variable references like</text:span><text:span text:style-name="T110"> $NAME or ${NAME} to include the </text:span><text:span text:style-name="T117">verbatim </text:span><text:span text:style-name="T110">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="T117">script</text:span><text:span text:style-name="T110"> 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="T117">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="P48"><text:span text:style-name="T111">While the definition of .config variables may use</text:span><text:span text:style-name="T118"> variable references like</text:span><text:span text:style-name="T111"> $NAME or ${NAME} to include the </text:span><text:span text:style-name="T118">verbatim </text:span><text:span text:style-name="T111">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="T118">script</text:span><text:span text:style-name="T111"> 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="T118">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"><text:soft-page-break/>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="P128"># joe1234.config</text:p> <text:p text:style-name="P128">NAME = Joe User</text:p> @@ -2744,44 +2767,44 @@ <text:p text:style-name="P128">#! /bin/sh</text:p> <text:p text:style-name="P132">NAME='%{NAME}'</text:p> <text:p text:style-name="P128">echo %{MESSAGE}</text:p> - <text:p text:style-name="P52">By default, <text:span text:style-name="T185">native variables are formatted as </text:span>shell script, namely ${NAME}:</text:p> + <text:p text:style-name="P52">By default, <text:span text:style-name="T186">native variables are formatted as </text:span>shell script, namely ${NAME}:</text:p> <text:p text:style-name="P131">#! /bin/sh</text:p> <text:p text:style-name="P134">NAME='Joe User'</text:p> <text:p text:style-name="P130">echo This experiment was generated by ${NAME}</text:p> - <text:p text:style-name="P53"><text:span text:style-name="T192">T</text:span>o support variable reference<text:span text:style-name="T191">s for other script languages, a</text:span> job specific variable '.var_format' may be defined. <text:span text:style-name="T191">It defines an output format string where any occurrence of '%s' will be replaced by the respective variable name. </text:span>For a Python based script, <text:span text:style-name="T185">this may look like:</text:span></text:p> + <text:p text:style-name="P53"><text:span text:style-name="T193">T</text:span>o support variable reference<text:span text:style-name="T192">s for other script languages, a</text:span> job specific variable '.var_format' may be defined. <text:span text:style-name="T192">It defines an output format string where any occurrence of '%s' will be replaced by the respective variable name. </text:span>For a Python based script, <text:span text:style-name="T186">this may look like:</text:span></text:p> <text:p text:style-name="P133"># joe1234.config</text:p> <text:p text:style-name="P133">NAME = Joe User</text:p> <text:p text:style-name="P133">MESSAGE = This experiment was generated by $${NAME}</text:p> <text:p text:style-name="P145">[jobs]</text:p> <text:p text:style-name="Preformatted_20_Text"><text:s text:c="2"/>[[job]]</text:p> - <text:p text:style-name="Preformatted_20_Text_20_Interrupt"><text:s text:c="4"/>.var_format = <text:span text:style-name="T188">"</text:span><text:span text:style-name="T186">' + str(</text:span>%s<text:span text:style-name="T190">)</text:span> <text:span text:style-name="T186">+ '</text:span><text:span text:style-name="T188">"</text:span></text:p> + <text:p text:style-name="Preformatted_20_Text_20_Interrupt"><text:s text:c="4"/>.var_format = <text:span text:style-name="T189">"</text:span><text:span text:style-name="T187">' + str(</text:span>%s<text:span text:style-name="T191">)</text:span> <text:span text:style-name="T187">+ '</text:span><text:span text:style-name="T189">"</text:span></text:p> <text:p text:style-name="P134">#%# joe1234.job.tmpl</text:p> <text:p text:style-name="P146">#! /usr/bin/env python </text:p> <text:p text:style-name="Preformatted_20_Text">NAME = '%{NAME}' </text:p> - <text:p text:style-name="Preformatted_20_Text">print<text:span text:style-name="T227">(</text:span>'%{MESSAGE}'<text:span text:style-name="T227">)</text:span> </text:p> + <text:p text:style-name="Preformatted_20_Text">print<text:span text:style-name="T228">(</text:span>'%{MESSAGE}'<text:span text:style-name="T228">)</text:span> </text:p> <text:p text:style-name="P59">This setup will expand to</text:p> <text:p text:style-name="P146">#! /usr/bin/env python </text:p> - <text:p text:style-name="P146">NAME = '<text:span text:style-name="T190">Joe User</text:span>' </text:p> - <text:p text:style-name="P147">print<text:span text:style-name="T227">(</text:span>'<text:span text:style-name="T110">This experiment was generated by </text:span><text:span text:style-name="T119">' + str(</text:span><text:span text:style-name="T110">NAME) </text:span><text:span text:style-name="T119">+ '</text:span>'<text:span text:style-name="T227">)</text:span></text:p> + <text:p text:style-name="P146">NAME = '<text:span text:style-name="T191">Joe User</text:span>' </text:p> + <text:p text:style-name="P147">print<text:span text:style-name="T228">(</text:span>'<text:span text:style-name="T111">This experiment was generated by </text:span><text:span text:style-name="T120">' + str(</text:span><text:span text:style-name="T111">NAME) </text:span><text:span text:style-name="T120">+ '</text:span>'<text:span text:style-name="T228">)</text:span></text:p> <text:h text:style-name="P270" 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="T194">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="T195">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="T195"> </text:span><text:soft-page-break/><text:span text:style-name="T195">maintains the special variable VARIABLES_. When generating output for</text:span></text:p> + <text:p text:style-name="P61">In the previous section, the native variables were initialized by an addition<text:span text:style-name="T195">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="T196">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="T196"> </text:span><text:soft-page-break/><text:span text:style-name="T196">maintains the special variable VARIABLES_. When generating output for</text:span></text:p> <text:p text:style-name="P135">NAME = Joe User</text:p> <text:p text:style-name="P136">EMAIL = joe@domain.tld</text:p> - <text:p text:style-name="P148"><text:span text:style-name="T110">MESSAGE = This experiment was generated by $${NAME} </text:span><text:span text:style-name="T121"><$${EMAIL}></text:span></text:p> - <text:p text:style-name="P62"><text:span text:style-name="T42">mkexp</text:span><text:span text:style-name="T110"> will parse all values, recognize 'NAME' and 'EMAIL' as native variables, and </text:span><text:span text:style-name="T122">will </text:span><text:span text:style-name="T110">put their names in the VARIABLES_ list. Now we may use the 'for' template directive to generate an additional line for each member of VARIABLES_. To query the value for a given variable name, </text:span><text:span text:style-name="T42">mkexp</text:span><text:span text:style-name="T110"> provides the 'context' function, such that the template</text:span></text:p> + <text:p text:style-name="P148"><text:span text:style-name="T111">MESSAGE = This experiment was generated by $${NAME} </text:span><text:span text:style-name="T122"><$${EMAIL}></text:span></text:p> + <text:p text:style-name="P62"><text:span text:style-name="T42">mkexp</text:span><text:span text:style-name="T111"> will parse all values, recognize 'NAME' and 'EMAIL' as native variables, and </text:span><text:span text:style-name="T123">will </text:span><text:span text:style-name="T111">put their names in the VARIABLES_ list. Now we may use the 'for' template directive to generate an additional line for each member of VARIABLES_. To query the value for a given variable name, </text:span><text:span text:style-name="T42">mkexp</text:span><text:span text:style-name="T111"> provides the 'context' function, such that the template</text:span></text:p> <text:p text:style-name="P135">#! /bin/sh</text:p> - <text:p text:style-name="P136">#%# for <text:span text:style-name="T141">variable</text:span> in <text:span text:style-name="T141">VARIABLES_</text:span>:</text:p> - <text:p text:style-name="P136">%{<text:span text:style-name="T141">variable</text:span>}='%{<text:span text:style-name="T141">context(variable)</text:span>}'</text:p> + <text:p text:style-name="P136">#%# for <text:span text:style-name="T142">variable</text:span> in <text:span text:style-name="T142">VARIABLES_</text:span>:</text:p> + <text:p text:style-name="P136">%{<text:span text:style-name="T142">variable</text:span>}='%{<text:span text:style-name="T142">context(variable)</text:span>}'</text:p> <text:p text:style-name="P136">#%# endfor</text:p> - <text:p text:style-name="P136">echo <text:span text:style-name="T187">"</text:span>%{MESSAGE}<text:span text:style-name="T187">"</text:span></text:p> + <text:p text:style-name="P136">echo <text:span text:style-name="T188">"</text:span>%{MESSAGE}<text:span text:style-name="T188">"</text:span></text:p> <text:p text:style-name="P54">eventually yields</text:p> <text:p text:style-name="P135">#! /bin/sh</text:p> - <text:p text:style-name="P148"><text:span text:style-name="T128">EMAIL</text:span><text:span text:style-name="T132">='</text:span><text:span text:style-name="T128">joe@domain.tld</text:span><text:span text:style-name="T132">'</text:span></text:p> - <text:p text:style-name="P148"><text:span text:style-name="T127">NAME</text:span><text:span text:style-name="T131">=</text:span><text:span text:style-name="T132">'</text:span><text:span text:style-name="T127">Joe User</text:span><text:span text:style-name="T132">'</text:span></text:p> - <text:p text:style-name="P148"><text:span text:style-name="T121">echo </text:span><text:span text:style-name="T189">"This experiment was generated by ${NAME} <${EMAIL}>"</text:span></text:p> + <text:p text:style-name="P148"><text:span text:style-name="T129">EMAIL</text:span><text:span text:style-name="T133">='</text:span><text:span text:style-name="T129">joe@domain.tld</text:span><text:span text:style-name="T133">'</text:span></text:p> + <text:p text:style-name="P148"><text:span text:style-name="T128">NAME</text:span><text:span text:style-name="T132">=</text:span><text:span text:style-name="T133">'</text:span><text:span text:style-name="T128">Joe User</text:span><text:span text:style-name="T133">'</text:span></text:p> + <text:p text:style-name="P148"><text:span text:style-name="T122">echo </text:span><text:span text:style-name="T190">"This experiment was generated by ${NAME} <${EMAIL}>"</text:span></text:p> <text:p text:style-name="P64">Note that the order of variable names is not necessarily the order in which they were defined in the .config file.</text:p> - <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2576_1114405012"/>Re-generation of <text:span text:style-name="T193">s</text:span>cripts and <text:span text:style-name="T193">b</text:span>ackup<text:bookmark-end text:name="__RefHeading__2576_1114405012"/></text:h> + <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2576_1114405012"/>Re-generation of <text:span text:style-name="T194">s</text:span>cripts and <text:span text:style-name="T194">b</text:span>ackup<text:bookmark-end text:name="__RefHeading__2576_1114405012"/></text:h> <text:p text:style-name="P60">Even the simplest user setup may contain an error. In this case, it is considered good practice to fix this error in the user setup, and to rerun <text:span text:style-name="T9">mkexp.</text:span><text:span text:style-name="T50"> If you want to be really good, you might even start a new experiment from the previous one's restart data.</text:span></text:p> <text:p text:style-name="P87"><text:span text:style-name="T60">A</text:span><text:span text:style-name="T50">s a convenient short-cut, </text:span><text:span text:style-name="T9">mkexp</text:span><text:span text:style-name="T50"> provides the script 'update' in the script directory. It may be called instead of going back to the 'run' and re-running </text:span><text:span text:style-name="T9">mkexp </text:span><text:span text:style-name="T50">directly. The update script records all command line settings and environment settings that were used for running </text:span><text:span text:style-name="T9">mkexp</text:span><text:span text:style-name="T50"> so that './update' reg</text:span><text:span text:style-name="T95">e</text:span><text:span text:style-name="T50">nerates the scripts exactly as they were created, without having to re-construct the exact settings. Like mkexp, update allows to set or change variables on the command line, e.g.</text:span></text:p> <text:p text:style-name="P127">./update FINAL_DATE=2015-12-31</text:p> @@ -2789,31 +2812,31 @@ <text:p text:style-name="P60"><text:soft-page-break/><text:span text:style-name="T50">Of course, there is also the possibility to </text:span><text:span text:style-name="T60">change</text:span><text:span text:style-name="T50"> the </text:span><text:span text:style-name="T19">generated</text:span><text:span text:style-name="T59"> </text:span><text:span text:style-name="T50">job scripts directly, and then go on. This is fine as long as the required setting is using a native variable or is otherwise easily editable. On the other hand, </text:span><text:span text:style-name="T61">facing</text:span><text:span text:style-name="T50"> the next </text:span><text:span text:style-name="T61">change,</text:span><text:span text:style-name="T50"> this might not be the case, so eventually you </text:span><text:span text:style-name="T59">may</text:span><text:span text:style-name="T50"> need to re-generate the whole thing. What now about those manual changes to the job scripts?</text:span></text:p> <text:p text:style-name="P60"><text:span text:style-name="T50">Whenever </text:span><text:span text:style-name="T9">mkexp</text:span><text:span text:style-name="T50"> sees existing job scripts while trying to generate the new description, it will automatically create backup files. They are placed in a subdirectory of SCRIPT_DIR, named 'backup'. </text:span><text:span text:style-name="T59">Also, the scripts for each regeneration are bundled in their own subdirectory, named after the current date-time stamp. </text:span><text:span text:style-name="T60">This way you may easily compare old and new scripts to evaluate and possibly transfer any manual changes </text:span><text:span text:style-name="T95">after a necessary regeneration</text:span><text:span text:style-name="T60">.</text:span></text:p> <text:h text:style-name="Heading_20_2" text:outline-level="2"><text:bookmark-start text:name="__RefHeading__2564_1114405012"/>Standard environments<text:bookmark-end text:name="__RefHeading__2564_1114405012"/></text:h> - <text:p text:style-name="P12">The above examples neglect an important feature <text:span text:style-name="T140">of job descriptions, namely the system or machine dependent set up. Different computing centers use different job control software and naming conventions, might provide different versions of the same software at differing locations. This needs to be handled in a way that is independent of the other configuration as far as possible.</text:span></text:p> + <text:p text:style-name="P12">The above examples neglect an important feature <text:span text:style-name="T141">of job descriptions, namely the system or machine dependent set up. Different computing centers use different job control software and naming conventions, might provide different versions of the same software at differing locations. This needs to be handled in a way that is independent of the other configuration as far as possible.</text:span></text:p> <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="T154">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="T196">may</text:span> <text:span text:style-name="T196">set</text:span> the special variable E<text:span text:style-name="T196">NVIRONMENT</text:span> to the name of <text:span text:style-name="T196">the host </text:span>e<text:span text:style-name="T196">nvironment</text:span> to use. <text:span text:style-name="T196">If it is not set, or empty, the 'DEFAULT' environment settings will be used.</text:span></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="T155">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="T197">may</text:span> <text:span text:style-name="T197">set</text:span> the special variable E<text:span text:style-name="T197">NVIRONMENT</text:span> to the name of <text:span text:style-name="T197">the host </text:span>e<text:span text:style-name="T197">nvironment</text:span> to use. <text:span text:style-name="T197">If it is not set, or empty, the 'DEFAULT' environment settings will be used.</text:span></text:p> <text:h text:style-name="P283" 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="T72">Most models need at least one Fortran namelist file or another form of configuration file to run. </text:span><text:span text:style-name="T73">The special section [namelists] </text:span><text:span text:style-name="T72">is designed to </text:span><text:span text:style-name="T73">contain all information that goes into </text:span><text:span text:style-name="T72">these</text:span><text:span text:style-name="T73"> files. Each </text:span><text:span text:style-name="T70">immediate </text:span><text:span text:style-name="T73">subsection defines settings for a single file that will </text:span><text:span text:style-name="T72">by default be </text:span><text:span text:style-name="T73">formatted as a Fortran namelist. </text:span><text:span text:style-name="T72">For </text:span><text:span text:style-name="T73">example,</text:span></text:p> <text:p text:style-name="P149"><text:soft-page-break/>[namelists]</text:p> <text:p text:style-name="P159"/> - <text:p text:style-name="P149"><text:s text:c="2"/>[[<text:span text:style-name="T208">namelist.echam</text:span>]] </text:p> + <text:p text:style-name="P149"><text:s text:c="2"/>[[<text:span text:style-name="T209">namelist.echam</text:span>]] </text:p> <text:p text:style-name="P149"><text:s text:c="4"/>[[[runctl]]] </text:p> <text:p text:style-name="P149"><text:s text:c="6"/>lamip = true</text:p> - <text:p text:style-name="P149"><text:s text:c="6"/><text:span text:style-name="T217">nproma = 48</text:span></text:p> + <text:p text:style-name="P149"><text:s text:c="6"/><text:span text:style-name="T218">nproma = 48</text:span></text:p> <text:p text:style-name="P151"><text:s text:c="6"/>earth_angular_velocity = 7.3e-5</text:p> <text:p text:style-name="P151"><text:s text:c="6"/>out_expname = joe1234</text:p> - <text:p text:style-name="P151"><text:s text:c="6"/><text:span text:style-name="T209">dt_stop = 2009, 1, 1, 0, 0, 0</text:span></text:p> + <text:p text:style-name="P151"><text:s text:c="6"/><text:span text:style-name="T210">dt_stop = 2009, 1, 1, 0, 0, 0</text:span></text:p> <text:p text:style-name="P66"><text:span text:style-name="T50">defines </text:span><text:span text:style-name="T71">a single </text:span><text:span text:style-name="T50">namelist file, </text:span><text:span text:style-name="T74">'namelist.echam'</text:span><text:span text:style-name="T50">, </text:span><text:span text:style-name="T72">containing a single namelist group with four variables of different types. Note </text:span><text:span text:style-name="T91">that you do not </text:span><text:span text:style-name="T72">need to use quotes for strings nor periods for logical values.</text:span></text:p> <text:h text:style-name="P266" 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="P97"><text:span text:style-name="T70">The </text:span><text:span text:style-name="T71">names of the </text:span><text:span text:style-name="T70">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="T71">name</text:span><text:span text:style-name="T70">s, and their variables are formatted as fields of this namelist </text:span><text:span text:style-name="T71">group</text:span><text:span text:style-name="T70">. </text:span><text:span text:style-name="T71">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="T208">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="T228">In the example above, the first four fields are single values of logical, integer, floating point, and string type.</text:span><text:span text:style-name="T74"> 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="P97"><text:span text:style-name="T70">The </text:span><text:span text:style-name="T71">names of the </text:span><text:span text:style-name="T70">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="T71">name</text:span><text:span text:style-name="T70">s, and their variables are formatted as fields of this namelist </text:span><text:span text:style-name="T71">group</text:span><text:span text:style-name="T70">. </text:span><text:span text:style-name="T71">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="T209">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="T229">In the example above, the first four fields are single values of logical, integer, floating point, and string type.</text:span><text:span text:style-name="T74"> 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="P118">&runctl</text:p> - <text:p text:style-name="P153"><text:s text:c="4"/>lamip = <text:span text:style-name="T141">.true.</text:span></text:p> - <text:p text:style-name="P153"><text:s text:c="4"/><text:span text:style-name="T208">nproma = </text:span><text:span text:style-name="T146">48</text:span></text:p> - <text:p text:style-name="P152"><text:s text:c="4"/>earth_angular_velocity = <text:span text:style-name="T141">7.3e-5</text:span></text:p> - <text:p text:style-name="P152"><text:s text:c="4"/>out_expname = <text:span text:style-name="T147">'</text:span><text:span text:style-name="T141">joe1234</text:span><text:span text:style-name="T147">'</text:span></text:p> - <text:p text:style-name="P152"><text:span text:style-name="T74"><text:s text:c="4"/>dt_stop = </text:span><text:span text:style-name="T134">2009, 1, 1, 0, 0, 0</text:span></text:p> + <text:p text:style-name="P153"><text:s text:c="4"/>lamip = <text:span text:style-name="T142">.true.</text:span></text:p> + <text:p text:style-name="P153"><text:s text:c="4"/><text:span text:style-name="T209">nproma = </text:span><text:span text:style-name="T147">48</text:span></text:p> + <text:p text:style-name="P152"><text:s text:c="4"/>earth_angular_velocity = <text:span text:style-name="T142">7.3e-5</text:span></text:p> + <text:p text:style-name="P152"><text:s text:c="4"/>out_expname = <text:span text:style-name="T148">'</text:span><text:span text:style-name="T142">joe1234</text:span><text:span text:style-name="T148">'</text:span></text:p> + <text:p text:style-name="P152"><text:span text:style-name="T74"><text:s text:c="4"/>dt_stop = </text:span><text:span text:style-name="T135">2009, 1, 1, 0, 0, 0</text:span></text:p> <text:p text:style-name="P137">/</text:p> <text:p text:style-name="P98">Please note that both group and field names are converted to lower case! Two fields named 'key' and 'Key' will result in two 'key = …' lines, and will cause trouble. We recommend using lower case for all group and field names.</text:p> <text:h text:style-name="P275" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2580_1114405012"/><text:span text:style-name="T72">S</text:span><text:span text:style-name="T50">uppressing namelist groups or variables</text:span><text:bookmark-end text:name="__RefHeading__2580_1114405012"/></text:h> @@ -2825,7 +2848,7 @@ <text:p text:style-name="P69"><text:span text:style-name="T63">The name of </text:span><text:span text:style-name="T74">this </text:span><text:span text:style-name="T63">variable</text:span><text:span text:style-name="T64"> </text:span><text:span text:style-name="T74">is</text:span><text:span text:style-name="T63"> generated from </text:span><text:span text:style-name="T74">its</text:span><text:span text:style-name="T63"> </text:span><text:span text:style-name="T64">respective</text:span><text:span text:style-name="T63"> file name, </text:span><text:span text:style-name="T74">like</text:span><text:span text:style-name="T63"> 'namelist.echam', by </text:span><text:span text:style-name="T73">converting all letters to upper case </text:span><text:span text:style-name="T63">(</text:span><text:span text:style-name="T73">namelist.echam →</text:span><text:span text:style-name="T63"> </text:span><text:span text:style-name="T73">NAMELIST.ECHAM</text:span><text:span text:style-name="T63">) </text:span><text:span text:style-name="T64">and </text:span><text:span text:style-name="T63">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> <text:p text:style-name="Preformatted_20_Text">[namelists]</text:p> - <text:p text:style-name="Preformatted_20_Text"><text:s text:c="2"/><text:span text:style-name="T141">[[namelist.echam]]</text:span></text:p> + <text:p text:style-name="Preformatted_20_Text"><text:s text:c="2"/><text:span text:style-name="T142">[[namelist.echam]]</text:span></text:p> <text:p text:style-name="Preformatted_20_Text"><text:s text:c="4"/>[[[runctl]]]</text:p> <text:p text:style-name="Preformatted_20_Text_20_Interrupt"><text:s text:c="6"/>out_expname = $${EXP_ID}</text:p> <text:p text:style-name="P150">#! /bin/sh</text:p> @@ -2846,9 +2869,9 @@ <text:h text:style-name="P272" 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="P162">[namelists]</text:p> - <text:p text:style-name="P162"><text:s text:c="2"/><text:span text:style-name="T233">[[namelist.echam]]</text:span></text:p> - <text:p text:style-name="P162"><text:s text:c="4"/><text:span text:style-name="T233">[[[runctl]]]</text:span></text:p> - <text:p text:style-name="Preformatted_20_Text_20_Interrupt"><text:s text:c="6"/><text:span text:style-name="T233">dt_stop = $$final_date</text:span></text:p> + <text:p text:style-name="P162"><text:s text:c="2"/><text:span text:style-name="T234">[[namelist.echam]]</text:span></text:p> + <text:p text:style-name="P162"><text:s text:c="4"/><text:span text:style-name="T234">[[[runctl]]]</text:span></text:p> + <text:p text:style-name="Preformatted_20_Text_20_Interrupt"><text:s text:c="6"/><text:span text:style-name="T234">dt_stop = $$final_date</text:span></text:p> <text:p text:style-name="P138">final_date='2015, 12, 31, 23, 52, 30'</text:p> <text:p text:style-name="P109">cat > namelist.echam << EOF</text:p> <text:p text:style-name="P116">%{NAMELIST_ECHAM}</text:p> @@ -2865,24 +2888,24 @@ <text:p text:style-name="P196">file names are taken to be relative to this directory</text:p> <text:p text:style-name="List_20_Heading"><text:span text:style-name="T50">.</text:span><text:span text:style-name="T101">sub_dir</text:span></text:p> <text:p text:style-name="P223"><text:span text:style-name="T102">file names are taken to be relative to this subdirectory of </text:span><text:span text:style-name="T50">'.base_dir'</text:span></text:p> - <text:p text:style-name="P63"><text:span text:style-name="T126">For expanding the resulting file path</text:span><text:span text:style-name="T110">, </text:span><text:span text:style-name="T42">mkexp</text:span><text:span text:style-name="T110"> provides </text:span><text:span text:style-name="T126">a global function:</text:span></text:p> - <text:p text:style-name="P240"><text:span text:style-name="T110">get_file</text:span><text:span text:style-name="T131">(</text:span><text:span text:style-name="T44">section</text:span><text:span text:style-name="T131">, </text:span><text:span text:style-name="T44">name</text:span><text:span text:style-name="T131">)</text:span></text:p> - <text:p text:style-name="P200">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="T253">All native script variables are expanded</text:span></text:p> + <text:p text:style-name="P63"><text:span text:style-name="T127">For expanding the resulting file path</text:span><text:span text:style-name="T111">, </text:span><text:span text:style-name="T42">mkexp</text:span><text:span text:style-name="T111"> provides </text:span><text:span text:style-name="T127">a global function:</text:span></text:p> + <text:p text:style-name="P240"><text:span text:style-name="T111">get_file</text:span><text:span text:style-name="T132">(</text:span><text:span text:style-name="T44">section</text:span><text:span text:style-name="T132">, </text:span><text:span text:style-name="T44">name</text:span><text:span text:style-name="T132">)</text:span></text:p> + <text:p text:style-name="P200">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="T254">All native script variables are expanded</text:span></text:p> <text:p text:style-name="P85"><text:span text:style-name="T101">Other than that, t</text:span><text:span text:style-name="T94">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="P265" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2833_1132221942"/>Overriding <text:span text:style-name="T231">input file</text:span>s <text:span text:style-name="T231">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="T232">As for namelists, t</text:span>here is special provision to change <text:span text:style-name="T231">the [</text:span>files<text:span text:style-name="T231">]</text:span> settings for a specific job. <text:span text:style-name="T231">Let us assume</text:span> <text:span text:style-name="T231">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="P144">[<text:span text:style-name="T231">files</text:span>]</text:p> - <text:p text:style-name="P104"><text:s text:c="2"/>[[<text:span text:style-name="T231">echam</text:span>]]</text:p> - <text:p text:style-name="P104"><text:s text:c="4"/>[[[<text:span text:style-name="T231">restart</text:span>]]]</text:p> - <text:p text:style-name="P104"><text:s text:c="6"/><text:span text:style-name="T231">restart_myexp_echam.nc = restart_myexp_echam_18491231.nc</text:span></text:p> - <text:p text:style-name="P86">The first run <text:span text:style-name="T232">will instead pick up its state from another experiment. This is done with </text:span><text:span text:style-name="T116"><text:s/>a job specific </text:span><text:span text:style-name="T125">'file</text:span><text:span text:style-name="T116">s</text:span><text:span text:style-name="T125">'</text:span><text:span text:style-name="T116"> subsection that – apart from the addition</text:span><text:span text:style-name="T118">al</text:span><text:span text:style-name="T116"> brackets – has the same structure as</text:span><text:span text:style-name="T115"> </text:span><text:span text:style-name="T116">the global </text:span><text:span text:style-name="T125">'files'</text:span><text:span text:style-name="T116"> section.</text:span></text:p> + <text:h text:style-name="P265" text:outline-level="3"><text:bookmark-start text:name="__RefHeading__2833_1132221942"/>Overriding <text:span text:style-name="T232">input file</text:span>s <text:span text:style-name="T232">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="T233">As for namelists, t</text:span>here is special provision to change <text:span text:style-name="T232">the [</text:span>files<text:span text:style-name="T232">]</text:span> settings for a specific job. <text:span text:style-name="T232">Let us assume</text:span> <text:span text:style-name="T232">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="P144">[<text:span text:style-name="T232">files</text:span>]</text:p> + <text:p text:style-name="P104"><text:s text:c="2"/>[[<text:span text:style-name="T232">echam</text:span>]]</text:p> + <text:p text:style-name="P104"><text:s text:c="4"/>[[[<text:span text:style-name="T232">restart</text:span>]]]</text:p> + <text:p text:style-name="P104"><text:s text:c="6"/><text:span text:style-name="T232">restart_myexp_echam.nc = restart_myexp_echam_18491231.nc</text:span></text:p> + <text:p text:style-name="P86">The first run <text:span text:style-name="T233">will instead pick up its state from another experiment. This is done with </text:span><text:span text:style-name="T117"><text:s/>a job specific </text:span><text:span text:style-name="T126">'file</text:span><text:span text:style-name="T117">s</text:span><text:span text:style-name="T126">'</text:span><text:span text:style-name="T117"> subsection that – apart from the addition</text:span><text:span text:style-name="T119">al</text:span><text:span text:style-name="T117"> brackets – has the same structure as</text:span><text:span text:style-name="T116"> </text:span><text:span text:style-name="T117">the global </text:span><text:span text:style-name="T126">'files'</text:span><text:span text:style-name="T117"> section.</text:span></text:p> <text:p text:style-name="P144">[jobs]</text:p> <text:p text:style-name="P144"><text:s text:c="2"/>[[run_first]]</text:p> - <text:p text:style-name="P144"><text:s text:c="4"/><text:span text:style-name="T141">[[[</text:span><text:span text:style-name="T150">file</text:span><text:span text:style-name="T141">s]</text:span><text:span text:style-name="T150">]</text:span><text:span text:style-name="T141">]</text:span></text:p> - <text:p text:style-name="P104"><text:s text:c="6"/><text:span text:style-name="T183">[[</text:span>[[<text:span text:style-name="T232">echam</text:span>]]<text:span text:style-name="T183">]]</text:span></text:p> - <text:p text:style-name="P104"><text:s text:c="8"/><text:span text:style-name="T183">[[</text:span>[[[<text:span text:style-name="T232">restart</text:span>]]]<text:span text:style-name="T183">]]</text:span></text:p> - <text:p text:style-name="P105"><text:span text:style-name="T110"><text:s text:c="10"/></text:span><text:span text:style-name="T124">restart_myexp_echam.nc = restart_</text:span><text:span text:style-name="T129">another</text:span><text:span text:style-name="T130">exp</text:span><text:span text:style-name="T124">_echam_18491231.nc</text:span></text:p> - <text:p text:style-name="P47"><text:span text:style-name="T116">This</text:span><text:span text:style-name="T124"> will result in a '.run_first' </text:span><text:span text:style-name="T125">script</text:span><text:span text:style-name="T124"> tha</text:span><text:span text:style-name="T125">t gets the model state from 'anotherexp', while the '.run' script</text:span><text:span text:style-name="T124"> </text:span><text:span text:style-name="T125">uses 'myexp'.</text:span></text:p> + <text:p text:style-name="P144"><text:s text:c="4"/><text:span text:style-name="T142">[[[</text:span><text:span text:style-name="T151">file</text:span><text:span text:style-name="T142">s]</text:span><text:span text:style-name="T151">]</text:span><text:span text:style-name="T142">]</text:span></text:p> + <text:p text:style-name="P104"><text:s text:c="6"/><text:span text:style-name="T184">[[</text:span>[[<text:span text:style-name="T233">echam</text:span>]]<text:span text:style-name="T184">]]</text:span></text:p> + <text:p text:style-name="P104"><text:s text:c="8"/><text:span text:style-name="T184">[[</text:span>[[[<text:span text:style-name="T233">restart</text:span>]]]<text:span text:style-name="T184">]]</text:span></text:p> + <text:p text:style-name="P105"><text:span text:style-name="T111"><text:s text:c="10"/></text:span><text:span text:style-name="T125">restart_myexp_echam.nc = restart_</text:span><text:span text:style-name="T130">another</text:span><text:span text:style-name="T131">exp</text:span><text:span text:style-name="T125">_echam_18491231.nc</text:span></text:p> + <text:p text:style-name="P47"><text:span text:style-name="T117">This</text:span><text:span text:style-name="T125"> will result in a '.run_first' </text:span><text:span text:style-name="T126">script</text:span><text:span text:style-name="T125"> tha</text:span><text:span text:style-name="T126">t gets the model state from 'anotherexp', while the '.run' script</text:span><text:span text:style-name="T125"> </text:span><text:span text:style-name="T126">uses 'myexp'.</text:span></text:p> </office:text> </office:body> </office:document> \ No newline at end of file diff --git a/doc/mkexp.pdf b/doc/mkexp.pdf index 4a35b13f601e17d138a6f955e50f6fe8269cc431..944619f3d55c2b9f86d50274af2450d3da751490 100644 GIT binary patch delta 71820 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 J_3qvN>Mz%g9OM81 delta 70826 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 ZqtinNr=ORBfGI#{L&(8#Q(2bq{{fNULtp>^ diff --git a/expargparse.py b/expargparse.py new file mode 100644 index 0000000..f474724 --- /dev/null +++ b/expargparse.py @@ -0,0 +1,60 @@ +''' +Specialized argument parser for mkexp tool. + +$Id: expargparse -1 2019-06-27 07:00:00Z m221078 $ +''' + +import argparse + +import package_info + +class MkexpArgumentParser(argparse.ArgumentParser): + ''' Specialized argument parser for mkexp tool + + Also used for parsing the 'update' script provided with the run scripts + ''' + def __init__(self): + argparse.ArgumentParser.__init__(self, description= + 'Generate an experiment from templates and the given configuration file.') + self.add_argument('config', help='experiment configuration file name') + self.add_argument('assigns', metavar='key=value', nargs='*', + help='override configuration file settings') + self.add_argument('-V', '--version', action='version', + version=package_info.version) + self.add_argument('-p', '--path', + help='search path for default config and templates') + self.add_argument('-m', '--no-make-dirs', + action='store_false', dest='make_dirs', + help='do not create work and data directories') + self.add_argument('-q', '--quiet', + action='store_true', dest='quiet', + help='suppress informative messages') + self.add_argument('-g', '--getexp', action='store_true', + help='load flat config (from getexp -vv)') + +def assigns_to_dicts(args): + + def value_to_list(value): + result = value.split(',') + if len(result) == 1: + result = result[0] + return result + + def assign_to_dict(assign): + (key, value) = assign.split('=', 1) + current = value_to_list(value) + pos = key.rfind('.') + while(pos >= 0): + if key[pos-1] == '.': + key = key[0:pos-1]+key[pos:] + pos = key.rfind('.', 0, pos-1) + else: + current = {key[pos+1:]: current} + key = key[0:pos] + pos = key.rfind('.') + if key: + current = {key: current} + return current + + return map(assign_to_dict, args.assigns) + diff --git a/getconfig b/getconfig new file mode 100755 index 0000000..aae0a6d --- /dev/null +++ b/getconfig @@ -0,0 +1,71 @@ +#! /usr/bin/env python +# +# Reconstruct config from update file, including command line +# +# $Id: getconfig -1 2019-06-26 18:00:00Z m221078 $ +# + +import argparse +import os +import re +import sys + +from configobj import ConfigObj + +import expargparse +from feedback import die +import package_info + +# +# Main routine +# + +# Check command line + +command_line = argparse.ArgumentParser(description= + 'Reconstruct config from update file, including command line.') +command_line.add_argument('update', nargs='?', default='update', + help='update script file name [%(default)s]') +command_line.add_argument('-V', '--version', action='version', + version=package_info.version) + +args = command_line.parse_args() + +# Check mkexp command line + +mkexp_line = expargparse.MkexpArgumentParser() + +# Experiment configuration + +config_dir = '' +config_file = '' +config_dicts = [] + +try: + update_file = open(args.update) + + for line in update_file: + match = re.match(r"^cd '(.*)'$", line) + if match: + config_dir = match.group(1) + else: + match = re.match(r"^exec '.*?' '(.*)'", line) + if match: + mkexp_args = mkexp_line.parse_args(match.group(1).split("' '")) + config_file = mkexp_args.config + config_dicts = expargparse.assigns_to_dicts(mkexp_args) + + update_file.close() +except IOError as error: + die("'{0}': {1}".format(error.filename, error.strerror)) + +if not os.path.isabs(config_file): + config_file = os.path.join(config_dir, config_file) + +config_data = ConfigObj(config_file, interpolation=False) +for d in config_dicts: + config_data.merge(d) + +config_data.indent_type = ' ' +config_data.write(sys.stdout) + diff --git a/mkexp b/mkexp index 50dc61d..f79e3b3 100755 --- a/mkexp +++ b/mkexp @@ -5,7 +5,6 @@ # $Id$ # -import argparse import codecs import os import re @@ -20,6 +19,7 @@ import jinja2 from jinja2 import Environment, ChoiceLoader, FileSystemLoader, \ TemplateNotFound, TemplatesNotFound, is_undefined +import expargparse from expconfig import ExpConfig, ExpConfigError import feedback import files @@ -220,30 +220,6 @@ def format_vars(section, key, log, fmt): elif '__iter__' in dir(value) and not isinstance(value, dict): # Format all list elements section[newkey] = map(transform, value) - -# Command line parsing - -def value_to_list(value): - result = value.split(',') - if len(result) == 1: - result = result[0] - return result - -def assign_to_dict(assign): - (key, value) = assign.split('=', 1) - current = value_to_list(value) - pos = key.rfind('.') - while(pos >= 0): - if key[pos-1] == '.': - key = key[0:pos-1]+key[pos:] - pos = key.rfind('.', 0, pos-1) - else: - current = {key[pos+1:]: current} - key = key[0:pos] - pos = key.rfind('.') - if key: - current = {key: current} - return current # # Main routine @@ -259,22 +235,7 @@ config_roots = os.environ.get('MKEXP_PATH', '').split(':') # Check command line -command_line = argparse.ArgumentParser(description= - 'Generate an experiment from templates and the given configuration file.', - version=package_info.version) -command_line.add_argument('config', help='experiment configuration file name') -command_line.add_argument('assigns', metavar='key=value', nargs='*', - help='override configuration file settings') -command_line.add_argument('--path', '-p', - help='search path for default config and templates') -command_line.add_argument('--no-make-dirs', '-m', - action='store_false', dest='make_dirs', - help='do not create work and data directories') -command_line.add_argument('--quiet', '-q', - action='store_true', dest='quiet', - help='suppress informative messages') -command_line.add_argument('--getexp', '-g', action='store_true', - help='load flat config (from getexp -vv)') +command_line = expargparse.MkexpArgumentParser() args = command_line.parse_args() @@ -385,8 +346,8 @@ template_env.tests['set'] = is_set # Store environment as default for control settings, then add config from files extra_dict = ConfigObj(interpolation=False) -for assign in args.assigns: - extra_dict.merge(assign_to_dict(assign)) +for assign_dict in expargparse.assigns_to_dicts(args): + extra_dict.merge(assign_dict) extra_dict['mkexp_input'] = 'Generated by $Id$' if not args.getexp: extra_dict['mkexp_input'] = extra_dict['mkexp_input'].replace('$', '$$') diff --git a/test.py b/test.py index 751eedb..70cff98 100644 --- a/test.py +++ b/test.py @@ -180,6 +180,14 @@ class CommandLineTestCase(MkexpTestCase): """) self.assertMultiLineEqual(expected, result) + def test_getconfig(self): + ignore = output(script(""" + mkexp test0001.config VAR4=value4 jobs.run.time_limit=12:34:56 + """)) + result = output(script('getconfig experiments/test0001/update')) + self.assertIn('VAR4 = value4', result) + self.assertIn('time_limit = 12:34:56', result) + class ContentTestCase(MkexpSimpleTestCase): def test_job_override(self): -- GitLab