Software Open Access

CppTransport 2018.1

Seery, David

JSON-LD ( Export

  "inLanguage": {
    "alternateName": "eng", 
    "@type": "Language", 
    "name": "English"
  "description": "<p><strong>2018.1</strong>&nbsp;release of the&nbsp;<strong>CppTransport</strong>&nbsp;platform&nbsp;for computation of correlation functions generated during an inflationary epoch in the early universe.</p>\n\n<p><strong>2018.1</strong>&nbsp;includes major new features:</p>\n\n<ul>\n\t<li>Supports models with a&nbsp;<strong>nontrivial field-space metric</strong></li>\n\t<li>Fully supports integration using&nbsp;<strong>arbitrary floating-point types</strong>, including&nbsp;<code>double</code>,&nbsp;<code>long double</code>&nbsp;or multiprecision types such as&nbsp;<a href=\"\">MPFR</a>, either directly or via a&nbsp;<a href=\"\"><em>Boost.Multiprecision</em>&nbsp;wrapper</a></li>\n\t<li>New&nbsp;<strong>email reporting options</strong>&nbsp;during computation</li>\n\t<li>Improved&nbsp;<strong>code generation</strong></li>\n\t<li><strong>Performance improvements</strong>&nbsp;and bug fixes, especially in the translator</li>\n\t<li>More substantial library of background quantities, including the&nbsp;<strong>eta parameter</strong>&nbsp;and the&nbsp;<strong>mass spectrum</strong></li>\n</ul>\n\n<p>In addition, the database schema for integration data containers has been adjusted slightly. If you encounter the error</p>\n\n<p><code>SQLite error: no such column: cpu_brand </code></p>\n\n<p>(normally issued when generating an HTML report) then&nbsp;<strong>your repository requires upgrading to the new format</strong>. To do so, use the&nbsp;<code>--upgrade</code>&nbsp;flag. Upgrading need be performed only once and leaves the repository backwards-compatible with older versions of&nbsp;<em>CppTransport</em>. While it is possible to use old-format databases with&nbsp;<em>CppTransport</em>&nbsp;2018.1 if you are not using HTML reports, we recommend that you upgrade all databases.</p>\n\n<p><strong>Platform improvements &ndash; translator</strong></p>\n\n<ul>\n\t<li>Major rewrite of the translator front-end to modernize the code-base. Much of this code dated back to 2013. This restructuring makes the parser simpler, more robust and easier to extend</li>\n\t<li>Algebra layer now distinguishes between real and complex fields (although currently all fields are real), meaning that operations like&nbsp;<code>abs(x)</code>&nbsp;now work as expected</li>\n\t<li>New&nbsp;<code>lagrangian</code>&nbsp;option allows selection of canonical of nontrivial-metric models. New&nbsp;<code>metric</code>&nbsp;keyword allows specification of the metric in a similar way to the potential</li>\n\t<li>The translator now understands index variances (ie. covariant or contravariant) and performs validation of these between left- and right-hand sides of indexed expressions</li>\n\t<li>Enforces that left-hand side indices occur only&nbsp;<em>once</em>, so that the expression represents a valid tensor assignment</li>\n\t<li>Add&nbsp;<code>require_version</code>&nbsp;construct (as part of a new top-level&nbsp;<code>metadata</code>&nbsp;block) to enforce a minimum&nbsp;<em>CppTransport</em>&nbsp;version when processing&nbsp;<code>.model</code>&nbsp;files</li>\n\t<li>Improved handling of directives (such as&nbsp;<code>$IF</code>&nbsp;or&nbsp;<code>$SET</code>). These must now appear on a single line by themselves to avoid ambiguity when unrolling indices, and their indices are validated more carefully</li>\n\t<li>Report resources that are not used before they are reassigned. This can help catch unnecessary computation when developing templates</li>\n\t<li>New replacement rules for the metric and Riemann tensor combinations needed in models with a nontrivial metric. Also new resource labels for these combinations</li>\n\t<li>New&nbsp;<code>$MOMENTA</code>&nbsp;replacement rule allows access to the momentum vector. Previously, only&nbsp;<code>$FIELDS</code>&nbsp;and&nbsp;<code>$COORDINATES</code>&nbsp;were available, giving access to the field vector or the full phase-space coordinate vector, respectively</li>\n\t<li>Distinguishes resources with different index variance assignments and can reposition these indices on-the-fly as needed. A command-line switch&nbsp;<code>--Wreposition</code>&nbsp;can be used to identify when on-the-fly repositioning occurs, possibly signalling that the computation can be speeded up by caching the result as a new resource</li>\n\t<li>Now applies common-subexpression-elimination to code deposited as part of a lambda function. In most cases this will improve efficiency and reduce the code size</li>\n\t<li>New command-line switch&nbsp;<code>--Wdevelop</code>&nbsp;provides developer warnings to assist in constructing templates, but allows these warnings to be suppressed in production use. These warnings include unroll-policy violations, enabling easy identification of functions where insufficient resources are available for roll-up to occur</li>\n\t<li>Performance profile data is no longer reported unless explicitly enabled with&nbsp;<code>--profile</code>&nbsp;switch. Profiling data is now reported from the lambda manager</li>\n\t<li>Improved handling of roll-up or unroll specifiers, and improved handling of roll-up conflicts</li>\n\t<li>Improved context information supplied with error or warning reports. To prevent error reports becoming unreadable, processing is now aborted if too many errors occur</li>\n\t<li>Enables new adaptive Adams-Bashforth-Moulton stepper from&nbsp;<a href=\"\">odeint-v2</a>, although its performance is not yet tested</li>\n\t<li>The build process will now download and build GiNaC automatically if a system-wide install is not found</li>\n\t<li>The odeint-v2 library is downloaded direct from its git repository rather than relying on a version bundled with Boost. This means we can be more aggressive about moving forward as odeint-v2 develops</li>\n\t<li>Builds are now tested by continuous integration using&nbsp;<a href=\"\">Travis.CI</a>. Builds correctly with Clang, Intel C++ 18 and GCC v6</li>\n\t<li>Old, deprecated&nbsp;<code>transport-objects</code>&nbsp;code removed</li>\n</ul>\n\n<p><strong>Platform improvements &ndash; runtime</strong></p>\n\n<ul>\n\t<li>Supports models with nontrivial field-space metric</li>\n\t<li>Track and report average load for master node and worker processes. Also, track and report database performance in inserts-per-second. This may help in spotting performance degradation or other issues during long running jobs</li>\n\t<li>Progress reports can now be generated at fixed time intervals or percentage intervals, rather than being fixed at 10%, 20% ... 90% of the complete task. This is done using new&nbsp;<code>--report-interval</code>&nbsp;and&nbsp;<code>--report-percentage</code>&nbsp;command-line switches. Report intervals can now be specified in seconds, minutes, hours or days rather than just minutes</li>\n\t<li>Progress reports are now written to a separate log file rather than being mixed in with general logging for the master process</li>\n\t<li>Add option to email progress reports during execution (use&nbsp;<code>--report-email</code>&nbsp;to specify one or more email addresses, and&nbsp;<code>--report-when</code>&nbsp;to specify when reports should be issued). Dispatch is done using a separate&nbsp;<code>CppTransport-sendmail</code>&nbsp;script. New CMake variables&nbsp;<code>EMAIL_SMTP_SERVER</code>,&nbsp;<code>EMAIL_FROM</code>&nbsp;and&nbsp;<code>EMAIL_PASSWORD</code>&nbsp;can be specified at build configuration time to set up the script automatically, or a suitable script can be provided separately</li>\n\t<li>Detects a number of common integration problems</li>\n\t<li>Computations may be vetted for&nbsp;<code>std::nan</code>&nbsp;and&nbsp;<code>std::inf</code>&nbsp;by defining&nbsp;<code>CPPTRANSPORT_STRICT_FP_TEST</code>. If detected, the integration is flagged as failed</li>\n\t<li>Implements new derived products for mass spectrum and eta parameter</li>\n\t<li>Failed integration and post-integration groups are now committed by default, rather than being moved to the failure cache. This allows their results to be re-used as the seed for a later integration (perhaps with a different stepper). The pre-2018.1 behaviour can be restored using the command-line switch&nbsp;<code>--reject-failed</code></li>\n\t<li>Calculate and report estimated total CPU time during work</li>\n\t<li>CPU type is recorded in worker information table. To support this the database format has been updated. If you need to upgrade a repository to the new format, use the&nbsp;<code>--upgrade</code>&nbsp;switch. Upgrading need be done only once and leaves the repository backwards-compatible with older versions of&nbsp;<em>CppTransport</em></li>\n\t<li>Time intervals can now be measured in days and weeks, not just seconds, minutes and hours (eg. for checkpoint interval)</li>\n\t<li>Improved general logging, now tagged with timestamps and severity levels</li>\n</ul>\n\n<p><strong>Bug fixes &ndash; translator</strong></p>\n\n<ul>\n\t<li>The mass matrix&nbsp;<code>M</code>&nbsp;was previously computed incorrectly. At some point, the formula for&nbsp;<code>M</code>&nbsp;was replaced by the formula for the&nbsp;<em>scale-matrix</em>&nbsp;(confusingly also called&nbsp;<code>M</code>) defined in Eq. (3.2b) of&nbsp;<a href=\"\">arXiv:1210.7800</a>&nbsp;(<a href=\"\">b5d7674c</a>)</li>\n\t<li>Fix major bug with use-counting in common-subexpression-elimination. Previously, use-counting was not applied recursively to the arguments of special functions. Instead, the&nbsp;<code>cpp_cse</code>&nbsp;implementation simply printed these using GiNaC&#39;s own C++ formatting. As a result, required variables might not be deposited to the temporary pool (<a href=\"\">f7d8a28c</a>)</li>\n\t<li>Fix major bug which could lead to incorrect expression output because of bracketing problems (<a href=\"\">1b4de464</a>)</li>\n\t<li>GiNaC functions are now mapped to their C++ versions more correctly. Not all functions are implemented, although most of them are available in&nbsp;<em>Boost.Math</em>&nbsp;and could be included in future (<a href=\"\">f7d8a28c</a>)</li>\n</ul>\n\n<p><strong>Bug fixes &ndash;&nbsp;runtime</strong></p>\n\n<ul>\n\t<li><code>--include</code>&nbsp;command-line switch to specify include path was unintentionally ignored in configuration files (<a href=\"\">a4aebd1b</a>)</li>\n\t<li>The Planck mass&nbsp;<code>M_P</code>&nbsp;was not available in code to compute the potential derivatives, leading to compilation errors in models that required it (<a href=\"\">0375f4b2</a>)</li>\n\t<li>The runtime platform was not properly agnostic regarding the floating point data type (<a href=\"\">d2e561d3</a>,&nbsp;<a href=\"\">1b0ad972</a>,&nbsp;<a href=\"\">b24e5368</a>,&nbsp;<a href=\"\">38497859</a>,&nbsp;<a href=\"\">23862fbe</a>)</li>\n\t<li><code>u3</code>&nbsp;derived product was computed using an incorrect momentum configuration (<a href=\"\">74138ca7</a>)</li>\n\t<li>Some index-manipulation functions such as&nbsp;<code>SPECIES</code>&nbsp;and&nbsp;<code>FLATTEN</code>&nbsp;were declared in the global&nbsp;<code>transport</code>&nbsp;namespace, leading to symbol collisions and compilation errors on any attempt to use two or more models simultaneously. These symbols should be declared in a model-local namespace and imported as needed (<a href=\"\">ec4162bb</a>)</li>\n\t<li>Tidy up formatting of tabulated output to remove unneeded trailing spaces</li>\n\t<li>Detection of terminal width did not always work correctly (<a href=\"\">25ede97e</a>)</li>\n\t<li><em>CppTransport</em>&nbsp;no longer uses&nbsp;<code>which</code>&nbsp;to locate the Python,&nbsp;<code>dot</code>, and&nbsp;<code>CppTransport-sendmail</code>&nbsp;executables. This causes a fork which can cause trouble if&nbsp;<em>CppTransport</em>&nbsp;is being used under OpenMPI (<a href=\"\">1f82131b</a>)</li>\n</ul>\n\n<p>&nbsp;</p>", 
  "license": "", 
  "creator": [
      "affiliation": "University of Sussex", 
      "@id": "", 
      "@type": "Person", 
      "name": "Seery, David"
  "url": "", 
  "datePublished": "2018-02-23", 
  "version": "2018.1", 
  "keywords": [
    "early universe cosmology", 
    "automated tools"
  "@context": "", 
  "identifier": "", 
  "@id": "", 
  "@type": "SoftwareSourceCode", 
  "name": "CppTransport 2018.1"
All versions This version
Views 106106
Downloads 3131
Data volume 38.0 MB38.0 MB
Unique views 9090
Unique downloads 3131


Cite as