Skip to content

Minor release 05 of May 2021

Compare
Choose a tag to compare
@amc1999 amc1999 released this 05 May 02:34
· 1170 commits to master since this release

Minor release 05 of May 2021

  • model code statements to suppress or retain parameters or tables in the model executable
  • update Xcode projects for Mac M1
  • db schema change: increase option value size to 32000
  • UI: remove empty parameters and tables groups

Download source code and binaries:

Download cluster version (MPI):

Linux downloads:

  • Desktop version build on Debian-10 and expected to work on any modern Linux, including Ubuntu 20.04 and CentOS 8
  • Cluster (MPI) Debian-10 version expected to work on any modern Linux with Open MPI version 3+ installed, including CentOS 8.
  • Cluster (MPI) CentOS-8 version require Open MPI 4.x and it would not work on RedHat / CentOS below 8.2 version.

IMPORTANT:
Full version of OpenM++ source code always included into "Download" links above.
Please do NOT use "Source code (zip)" or "Source code (tar.gz)" archives from "Assets" links below.
It is auto-generated by GitHub release tools and contains only half of OpenM++ source code.

Notes:

1.There is a minor change of model database schema: model run options now can be up to 32000 characters long.
This change should not affect existing model databases however it is recommended to rebuild the models and use a new copy of Model.sqlite database files.

Model code statements to suppress or retain parameters or tables in the model executable

Synopsis:

parameters_suppress param1, param2, param_grp1, ... ;
parameters_retain param1, param2, param_group1, ... ;
tables_suppress table1, table2, table_grp1, ...;
tables_retain table1, table2, table_grp1, ...;

Description:

A family of four new statements has been added to the language. Without affecting a simulation in any way, these statements can trim down a model at build time by selectively suppressing parameters (parameters_suppress) or tables (suppress_tables). Complementary statements (parameters_retain, tables_retain) specify that the model is only to contain specified parameters or tables, suppressing all others. The openM++ compiler will raise an error if a model contains both parameters_suppress and parameters_retain, or both tables_suppress and tables_retain.

Suppressed parameters are burned into the executable using values when the model is built. Suppressed parameters are absent from the user interface and the database, and from metadata in the database. Large models can benefit significantly both in build time and start-up time by suppressing parameters (no need to read such parameters from the database when launching the model). Suppressing parameters can also be used to simplify the UI of a deployed model.

Suppressed tables are completely removed from the model. Large models can benefit significantly both in build time and run time by suppressing tables.

Table dependencies specified using the dependency statement are always respected if a suppressed table is required by a non-suppressed table. Such 'internal' tables are computed by the model but not made visible. They are not published as meta data, and results of internal tables are not written to the database.

Branches of the parameter or table hierarchy which become empty because of parameter or table suppression are not published to the DB when the model is built. As a result, the UI will show a trimmed down version of the hierarchy.

Example:

The following code is extracted from a module SuppressRetain.ompp which was added to the large OncoSimX model for testing, to create a model containing only parameters and tables related to breast cancer (OncoSim simulates many cancers).

parameters_retain
  SimulationSeed,
  SimulationCases,
  Breast_Cancer_Parameters
;

tables_retain
  TG01_Breast_Cancer_Tables
;

These statements produced a version of OncoSimX trimmed down to only parameters and tables associated with the breast cancer component.

Notes:

OpenM++ also includes the ability to selectively suppress tables at run-time using the options Tables.Suppress and Tables.Retain. These options allow a model user to economize processing time and storage by selecting tables of interest in a published model. The model code statements tables_suppress and tables_retain are quite different because they remove tables completely from a model. That eliminates the cost of publishing the table metadata to the DB when the model is built. In addition, all C++ generated code and internal attributes associated with a table are absent when a table is suppressed using tables_suppress, making the model run faster and take less memory than the same model with the same table de-activated at runtime using the option Tables.Suppress.

Models with suppressed parameters build faster because their metadata and Default values are not published to the DB. They also launch faster because there is no need for the model to read the parameters from the DB when the model starts. A suppressed parameter can be made visible and editable in the model UI by changing the suppress/retain statement and rebuilding the model. This is simpler than using the Fixed parameter mechanism, which involves moving a parameter between folders.

Models often contain diagnostic tables used for testing and development, but only needed occasionally subsequently. Instead of commenting out or removing such tables, they can be kept, but added to a table group and then suppressed. That way, the diagnostic tables continue to be parsed and verified when the model is built.

During model development, a model is often modified, built, and run repeatedly when working on a specific component. That process can be accelerated by using parameters_retain and tables_retain temporarily to focus only on the parameters and tables associated with the current development activity. That optimizes the model to the current development activity, without changing the logic or simulation.

A table specified in a Modgen hide statement is computed internally by the model, and is not written as metadata or results to the DB.

A parameter specified in a Modgen hide statement is burned into the executable, and is not written as metadata or results to the DB. This is different from Modgen, which retains all tables and parameters and passes the hide statement information to the display layer as a hint.