Skip to content

Releases: openmpp/main

UI code upgrade to recent frameworks: Vue.js 3 and Quasar 2. 21 of October 2024

22 Oct 03:38
Compare
Choose a tag to compare

UI code upgrade to recent frameworks: Vue.js 3 and Quasar 2. 21 of October 2024

v1.17.5

This release is strongly recommended to all model developers due to bug fix in c++ model run-time.

Following included in this release:

  • c++ core: fix incorrect select of parameters by base run id
  • go oms: enable storage control without job control
  • go oms: add Windows version of database cleanup script
  • go oms: suspend job queue if storage quota exceeded
  • UI: upgrade to Vue.js 3 and Quasar 2
  • UI: update markdown notes editor
  • UI: add delete all downloads or uploads buttons to Downloads page
  • UI: add custom links to "more" menu

c++ core: fix incorrect select of parameters by base run id

We were recently discovered a bug in our c++ model run-time code. Model run fails at the very beginning with error message similar to:
"
2024-09-14 20:37:44.077 DB error: invalid number of rows in parameter: AgeByProvince, expected: 8, found: 0
"
It is not easy to reproduce such bug and you may never experience it. Model run results are not affected by that bug. However it is strongly recommended to use that fix in production.

UI: upgrade to Vue.js 3 and Quasar 2

Our UI upgraded to most recent versions of Vue.js 3 and Quasar 2 frameworks. It was a breaking change in UI code because upstream frameworks are not backward compatible.

UI: update markdown notes editor

Markdown editor in UI replaced with better 3rd party component, however it may be a bit slow on low end computers.

UI: add delete all downloads or uploads buttons to Downloads page

There is an extra buttons on UI Download page to delete all downloads or upload at once. Please keep in mind, it is a full cleanup and it deletes of downloads or uploads directory for all models.

Thank you to Joel Barnes for suggestion.

UI: add custom links to "more" menu

There is users request to add custom links in UI, for example, links to model-specific licence. Now it is possible to do by customizing etc/ui.extra.json file:

{
  "MoreMenu": [{
      "Link": "https://github.com/openmpp/openmpp.github.io/wiki/Ompp-UI-User-Interface",
      "LangCode": "en",
      "Label": "UI Help"
    }, {
      "Link": "https://github.com/openmpp/openmpp.github.io/wiki/Ompp-UI-User-Interface",
      "LangCode": "fr",
      "Label": "Aide de l'interface"
    }, {
      "Link": "https://openmpp.org",
      "LangCode": "en",
      "Label": "OpenM++ website"
    }, {
      "Link": "https://openmpp.org",
      "LangCode": "fr",
      "Label": "Site d'OpenM++"
    }
  ]
}

Go oms: enable storage control without job control
Go oms: add Windows version of database cleanup script
Go oms: suspend job queue if storage quota exceeded

Storage control (a.k.a. disk space quotas) extensively used in production to reduce cloud storage cost. However it was a part of jobs control (a.k.a. model runs queue) and not available for "desktop" users.

Also we were providing only Linux version of SQLite database cleanup and now Windows version available for "desktop" model users. Thank you to Joel Barnes for productive discussion (we do listen to our users :)).

Download source code and binaries:

Download release documentation archive:

Download cluster version (MPI):

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.

Use CSV, TSV and INI files to run the model. 31 of July 2024

01 Aug 01:01
Compare
Choose a tag to compare

Use CSV, TSV and INI files to run the model. 31 of July 2024

v1.17.4

This is a minor release and includes a UI to run the model with additional CSV, TSV or INI file. It is also the first release of a new dbget utility which allows export model run results with language-specific labels.

Following included in this release:

  • c++ core: allow to use model parameters from TSV files
  • go dbget: export model runs parameters and output tables into CSV or TSV
  • go dbget: export compatibility views model run parameters and output tables into CSV or TSV
  • go dbget: export compatibility views model metadata into CSV, TSV or JSON
  • UI: use CSV, TSV and INI files to run the model

Allow to use model parameters from TSV files

It is now possible to use model input parameters from TSV (tab-separated) files in the same way as it done for CSV files, please see examples in our wiki:

dbget: export model run parameters and output tables into CSV or TSV

There is a new dbget utility which allow to export model run results with language-specific labels. For example, if your Windows desktop default language is French then results can be:

dbget -m RiskPaths -dbget.LastRun -parameter UnionStatusPreg1
sub_id,Dim0,param_value
0,Jamais dans une union,"0,0648"
0,Première union << 3 années,1
0,Première union >> 3 années,"0,2523"
0,Après la première union,"0,0648"
0,Deuxième union,"0,8048"
0,Après la deuxième union,"0,0648"
dbget -m RiskPaths -dbget.LastRun -table     T05_CohortFertility
expr_name,expr_value
Âge moyen à la première grossesse,"22,22884150506548"
Sans enfants,"0,07340000000000002"
Pourcentage ayant un enfant,"0,9266"

Please notice dimension items labels in French and comma , instead of decimal . dot.

It is possible to specify desired language explicitly to override your OS default. For more details please see our wiki section: Use dbget: Export model run results into text files

dbget: export compatibility views model run parameters and output tables into CSV or TSV
dbget: export compatibility views model metadata into CSV, TSV or JSON

It is possible to export model run results from backward compatibility views (Modgen views):

dbget -m RiskPaths -do old-run
dbget -m modelOne  -do old-parameter -dbget.Parameter ageSex
dbget -m modelOne  -do old-table     -dbget.Table     salarySex

Or export model metadata in from compatibility views:

dbget -m RiskPaths -do old-model

Please notice: it is not always possible to exactly recreate Modgen data from openM++ data, it is only a partial compatibility.

UI to use CSV, TSV and INI files to run the model

It is possible to use CSV, TSV or INI files to run the model in UI. There is also an UI to manage files on remote server: upload, download, view, delete files, create or delete folders. For example, you can upload SomeScenario.zip archive with CSV or TSV parameters. That .zip will be automatically unpacked and you can point and click in the UI to run the model with those parameters.

Please see more in our wiki: UI: Use ini-files or CSV parameter file

files_7_run_model_csv_2024_07_28

Download source code and binaries:

Download release documentation archive:

Download cluster version (MPI):

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.

Test release for Visual Studio 17.4

09 Oct 00:00
Compare
Choose a tag to compare
Pre-release

Please do NOT use this release unless you have to.

This is a special release build with Visual Studio version 17.4

Model run comparison UI hotfix

26 Jun 23:01
Compare
Choose a tag to compare

Model run comparison UI hotfix
v1.17.3-hotfix-ui

Please apply this bug fix if you are using model run comparison UI percentage calculation:

ompp_UI_percent_2024-06-26

How to apply this hotfix:

  1. Download hotfix archive:
  2. Delete existing html folder from openM++ release v1.17.3, for example: C:\openmpp_win_20240621\html or ~/openmpp_debian_20240621/html
  3. Unpack hotfix archive and copy new html folder into your openM++ release location.

IMPORTANT:
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 does not contains actual hotfix source code.

Minor release, 21 of June 2024

21 Jun 10:39
Compare
Choose a tag to compare

Minor release, 21 of June 2024

v1.17.3

This is a minor release and it is recommended to all model developers.

Following included in this release:

  • c++ core: option index_errors validates array indices at runtime
  • UI and go back-end: add filters by value for output tables, parameters and microdata
  • UI and go back-end: allow to use any INI file to run the model
  • UI and go back-end: user files (e.g. INI files) management on server: view, delete, upload, download.
  • UI and go oms: add bulk delete capacities
  • UI: start UI from UNC location on Windows
  • multiple small improvements in UI

Option index_errors validates array indices at runtime

In this release, the option index_errors can be turned on by inserting the following in model code, e.g. in code/ompp_options.ompp:

options index_errors = on;

If on, this option will verify that indices of multi-dimensional parameters and indices of entity array members in model code respect the bounds of the enumerations used as dimensions. If an invalid index is encountered during a run, the run fails with a runtime error like the following:

Simulation error: invalid index 42 in 0-based dimension 0 of AgeBaselinePreg1 with bounds [0,11] when current time is 26.53781272839055 in entity_id 1 in or after event FirstPregEvent in simulation member 0 with combined seed 1 at module Fertility.mpp[78]

If index_errors is on, model build may take noticeably more time. A possible subsequent implementation of index_errors may be more efficient.

Unlike Modgen, index_errors in OpenM++ works in both Debug and Release mode.

In preliminary tests, the Release mode implementation of index_errors appeared to be very efficient, with little impact on model run time in several large models tested.

For more, please see the wiki topic Enumerations · openmpp/openmpp.github.io Wiki · GitHub (WIP).

Thanks to the PASSAGES team for highlighting the importance of this feature, and for pointing out that this Modgen functionality was not implemented in OpenM++.

UI: Filter model run results by value

Now it is possible to filter model run results not only by selecting dimension items, but also by applying conditions to output table values or microdata values. Screenshot below is RiskPaths output table Fertility rates by age group filtered by:

  • excluding from Age Interval dimension first 3 age groups, where age is below 20;
  • apply filter to see only data where Fertility > 0.5.

value_filter_2_table_2024_06_04

Please see our wiki for more information: Filter run results by value. Value filters are also fully supported by oms API and you can use R, Python, Perl, etc. to analyze model run output values and input parameter values.

INI files support in UI

It is possible now to choose an INI file in the UI to run the model. Also you can view INI files on the server, download it, upload, delete and organize in folders. We are planning to improve those capabilities in the next release and allow upload / download CSV parameter files as well.

Thank you to the PASSAGES team to encourage us, without your friendly demands it would never be done.

image

Download source code and binaries:

Download release documentation archive:

Download cluster version (MPI):

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.

Microdata comparison UI release 22 of April 2024

22 Apr 09:14
Compare
Choose a tag to compare

Microdata comparison UI release 22 of April 2024

20240422 : v1.17.2

This release provides UI for microdata run comparison (a.k.a. winners-losers) and multiple enhancements for openM++ language (extensions of Modgen language).

Main features of this release:

  • c++ core: new optional lifecycle attributes to probe events
  • c++ core: new "untransformed" tables
  • c++ core: new "snapshot" tables
  • c++ core: allow explicit declaration of table filter attribute
  • UI: microdata aggregation and run comparison
  • go: new fair scheduling of cloud CPU resources

Other changes:

  • c++ core: new example model TableProbe2
  • c++ core: protect model run-time code from Microsoft MPI bug
  • go: initial version of dbget utility to extract and transform model run results
  • go dbcopy: add output to TSV files
  • change oms UI back-end and MSBuild to correctly handle ini-files in UI
  • Linux and MacOS: fix issues with spaces in file path

New optional lifecycle attributes to probe events

A new option lifecycle_attributes creates 2 attributes and a supporting classification which can be used to probe model events. For more information, please see the wiki topic (containing worked examples with screenshots) at:
Lifecycle Attributes · openmpp/openmpp.github.io Wiki

New "untransformed" tables

In this release, if the " table" keyword is followed by the optional keyword "untransformed", the measures for that table are computed using no weights and no population scaling, and the run-level table is computed by assembling measures over subs (using the new measures_method=assemble), e.g. by summing counts rather than by averaging them over subs.

New "snapshot" tables

In this release, the "table" keyword can be followed by the optional table property "snapshot". Snapshot tables change the default increment from "delta" to "value_out", making it easier to specify a table with a zero-duration filter constructed using a trigger derived attribute.
For more information, see Entity Tables · openmpp/openmpp.github.io Wiki
Please note that wiki topic and related wiki topics are being actively edited.

Allow explicit declaration of table filter attribute

An entity table filter is an expression involving entity attributes.
OpenM++ creates identity attributes as needed to implement the table filters in a model.
They are shown in table and attribute topics in the Developer Edition of the model’s Symbol Reference.

A new syntax in this release allows a model developer to declare the table filter explicitly in the table declaration, e.g.:

table snapshot untransformed Person X01_Events //EN All Events
[ bool filter_X01 = trigger_changes(lifecycle_counter) ]
{
    lifecycle_event //EN Event
  * {
        unit //EN N
    } //EN Statistic
};

This can be a convenient way to explore a table filter directly, e.g. using microdata output.
It is equivalent to declaring the original filter expression as an identity attribute, then using that attribute instead of the expression as the table filter.
Table filters declared explicitly do not participate in de-duplication of table filters (sharing of identical filters) done by OpenM++.

New example model TableProbe2

This release includes a new example model TableProbe2, which is used in the wiki to illustrate entity table concepts and use.

TableProbe2 is not Modgen compatible.

UI: microdata aggregation and run comparison

Microdata UI provides new capabilities to aggregate and compare model runs microdata. For example, if there is a hypothetical tax model then user can compare different taxation policies to find an average percent of income difference by age group, province and gender.

Please visit our wiki for more information: UI: Aggregate and Compare Microdata

New fair scheduling of cloud CPU resources

Oms web-service back-end updated to fairly share cloud CPU resources between multiple users under heavy load. With previous version batch users (those who were submitting 100x model runs through R or Python scripts) were able to monopolize entire cluster CPU resources for multiple days. New version provides a fair share of CPUs to all users even under heavy load.

Initial version of dbget utility to extract and transform model run results

New dbget utility allow to extract and transform model run results from the database and save it into CSV files. For example it allows to compare run results microdata to find which age and gender groups are winning or losing from taxation policy changes:

dbget -db modelOne.sqlite -do microdata-compare
  -m TaxModel
  -dbget.Run Default
  -dbget.WithRuns "Updated Tax Policy"
  -dbget.Entity Person
  -dbget.GroupBy "AgeGroup, Gender"
  -dbget.Calc "OM_COUNT_IF( Income[base] - Income[variant] > param.Threshold[base] )"

This release include an initial version of dbget utility, functionality will be significantly extended in subsequent releases

dbcopy utility: add output to TSV files

Now it is possible to extract database content into TSV files.
For example to get .json model metadata files and TSV parameters, output tables, microdata files:

dbcopy -m modelOne -dbcopy.IntoTsv

To get get model metadata, parameters, output tables, microdata as TSV files:

dbcopy -m modelOne -dbcopy.To csv -dbcopy.IntoTsv

Download source code and binaries:

Download release documentation archive:

Download cluster version (MPI):

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.

Pre-release 16 of April 2024

17 Apr 03:12
Compare
Choose a tag to compare
Pre-release

Preview release 16 of April 2024

v1.17.2-pre-2

This is a preview of the next release, do not use it in production.

Main features of this release:

  • c++ core: new optional lifecycle attributes to probe events
  • c++ core: new "untransformed" tables
  • c++ core: allow explicit declaration of table filter attribute
  • UI: microdata aggregation and run comparison
  • go: initial version of dbget utility to extract and transform model run results
  • go: new fair scheduling of cloud CPU resources

Other changes:

  • c++ core: new example model TableProbe2
  • c++ core: protect model run-time code from Microsoft MPI bug
  • go dbcopy: add output to TSV files
  • change oms UI back-end and MSBuild to correctly handle ini-files in UI
  • Linux and MacOS: fix issues with spaces in file path

New optional lifecycle attributes to probe events

A new option lifecycle_attributes creates 2 attributes and a supporting classification which can be used to probe model events. For more information, please see the wiki topic (containing worked examples with screenshots) at:
Lifecycle Attributes · openmpp/openmpp.github.io Wiki

New "untransformed" tables

In this release, if the " table" keyword is followed by the optional keyword "untransformed", the measures for that table are computed using no weights and no population scaling, and the run-level table is computed by assembling measures over subs (using the new measures_method=assemble), e.g. by summing counts rather than by averaging them over subs.

Allow explicit declaration of table filter attribute

An entity table filter is an expression involving entity attributes.
OpenM++ creates identity attributes as needed to implement the table filters in a model.
They are shown in table and attribute topics in the Developer Edition of the model’s Symbol Reference.

A new syntax in this release allows a model developer to declare the table filter explicitly in the table declaration, e.g.:

table snapshot untransformed Person X01_Events //EN All Events
[ bool filter_X01 = trigger_changes(lifecycle_counter) ]
{
    lifecycle_event //EN Event
  * {
        unit //EN N
    } //EN Statistic
};

This can be a convenient way to explore a table filter directly, e.g. using microdata output.
It is equivalent to declaring the original filter expression as an identity attribute, then using that attribute instead of the expression as the table filter.
Table filters declared explicitly do not participate in de-duplication of table filters (sharing of identical filters) done by OpenM++.

New example model TableProbe2

This release includes a new example model TableProbe2, which is used in the wiki to illustrate entity table concepts and use.

TableProbe2 is not Modgen compatible.

UI: microdata aggregation and run comparison

Microdata UI provides new capabilities to aggregate and compare model runs microdata. For example, if there is a hypothetical tax model then user can compare different taxation policies to find an average percent of income difference by age group, province and gender.

Initial version of dbget utility to extract and transform model run results

New dbget utility allow to extract and transform model run results from the database and save it into CSV files. For example it allows to compare run results microdata to find which age and gender groups are winning or loosing from taxation policy changes:

dbget -db modelOne.sqlite -do microdata-compare
  -m TaxModel
  -dbget.Run Default
  -dbget.WithRuns "Updated Tax Policy"
  -dbget.Entity Person
  -dbget.GroupBy "AgeGroup, Gender"
  -dbget.Calc "OM_COUNT_IF( Income[base] - Income[variant] > param.Threshold[base] )"

This release include an initial version of dbget utility, functionality will be significantly extended in subsequent releases

New fair scheduling of cloud CPU resources

Oms web-service back-end updated to fairly share cloud CPU resources between multiple users under heavy load. With previous version batch users (those who were submitting 100x model runs through R or Pythin scripts) were able to monopolize entire cluster CPU resources for multiple days. New version provides fair share of CPUs to all users even under heavy load.

Download source code and binaries:

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.

Pre-release 14 of April 2024

15 Apr 03:37
Compare
Choose a tag to compare
Pre-release

Preview release 14 of April 2024

v1.17.2-pre

This is a preview of the next release, do not use it in production. We are adding more features to the UI for microdata run comparison, also more wiki documentation coming next week.

Main features of this release:

  • c++ core: new optional lifecycle attributes to probe events
  • c++ core: new "untransformed" tables
  • UI: add microdata aggregation and run comparison
  • go oms: new dget utility, version zero
  • new fair scheduling of cloud CPU resources

Other changes:

  • c++ core: new example model TableProbe2
  • c++ core: protect model run-time code from Microsoft MPI bug
  • go dbcopy: add output to TSV files
  • change oms UI back-end and MSBuild to correctly handle ini-files in UI
  • Linux and MacOS: fix issues with spaces in file path

Other changes:

  • c++ core: new example model TableProbe2
  • c++ core: protect model run-time code from Microsoft MPI bug
  • Go dbcopy: add output to TSV files
  • change oms UI back-end and MSBuild to correctly handle ini-files in UI
  • Linux and MacOS: fix issues with spaces in file path

New optional lifecycle attributes to probe events

A new option lifecycle_attributes creates 2 attributes and a supporting classification which can be used to probe model events. For more information, please see the wiki topic (containing worked examples with screenshots) at:
Lifecycle Attributes · openmpp/openmpp.github.io Wiki

New "untransformed" tables

In this release, if the " table" keyword is followed by the optional keyword "untransformed", the measures for that table are computed using no weights and no population scaling, and the run-level table is computed by assembling measures over subs (using the new measures_method=assemble), e.g. by summing counts rather than by averaging them over subs.

New example model TableProbe2

This release includes a new example model TableProbe2, which is used in the wiki to illustrate entity table concepts and use.

TableProbe2 is not Modgen compatible.

Download source code and binaries:

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.

Bug fix release 22 of March 2024

22 Mar 18:25
Compare
Choose a tag to compare

Bug fix release 22 of March 2024

20240322 : v1.17.1

This is a bug fix release and recommended for all developers.

Changes in this release:

Bug fix for table suppression check

If model run fails at the beginning with error message similar to:

2024-03-22 01:25:33.114 member=0 Prepare for simulation
2024-03-22 01:25:33.116 DB error: output table not found in tables dictionary: Breast_Cancer_Rates_AgeStandard_Table
2024-03-22 01:25:33.151 FAILED: DB error

then please re-build your model executables to avoid that bug.

This bug is manifested only in rare case scenarios with complex output tables dependencies and if you are running the model with tables suppression.

Default microdata key uniqueness

Microdata output to the run database requires that each record have a unique key so that microdata can be compared across runs using that key. Model code can include a function definition to produce the key, or it can let the OpenM++ compiler generate a default function definition. In this release, the default function definition has been enhanced to make the microdata key unique by sequentially numbering microdata records from the same entity. Previously, the default definition could cause a run to fail because the key was not unique if multiple microdata records were output for the same.

For more information about microdata output, please see Microdata Output · openmpp/openmpp.github.io Wiki · GitHub

Bug fix in UI disk usage

There is an incorrect disk space usage total value for all cloud users displayed in UI. That issue is fixed now.

Download source code and binaries:

Download release documentation archive:

Download cluster version (MPI):

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.

Disk space usage control in cloud: 18 of March 2024

18 Mar 23:06
Compare
Choose a tag to compare

Disk space usage control in cloud: 18 of March 2024

20240318 : v1.17.0

Main features of this release:

  • disk space usage control UI and back-end tools to set storage quotas for users and enforce space cleanup
  • control the aggregation of subs to produce run-level tables
  • multiple changes in generated model documentation

Other changes:

  • c++ core: New 'standard' model files
  • c++ core: French translations of run log messages
  • c++ core: Function definition of ProcessDevelopmentOptions no longer required in model code
  • c++ core: Renamed demo models OzProj and OzProjGen – microdata removed from distribution
  • UI and back-end: do not allow to open parameter, table or microdata if dimension type size or attribute size exceeds the limit
  • UI and back-end: fix issues related to large range types handling in back-end and UI

Disk space usage control UI and tools

For cloud environment it is important to limit disk resources usage and force users to cleanup old model runs data. This release provides an ability for cloud administrator to set storage quotas and block model run functionality until user cleanup it own space. There is a new UI and related back-end tools available for users to analyze and cleanup storage space.

Control the aggregation of subs to produce run-level tables

OpenM++ computes the run-level value of a table cell by aggregating the values of the table cell over the subs/replicates/members of the run. The aggregation method depends on the kind of model (case-based or time-based), the value of the measures_method option, the kind of table (entity or derived), and for entity tables, the measure statistic (count, sum, min, max, etc.). With this release, a model developer can specify the aggregation method explicitly for individual table measures.

For more information, please see Tables · openmpp/openmpp.github.io Wiki · GitHub.

Generated Model Documentation enhancements

The following enhancements to the generated Symbol Reference are implemented in this release:

  • attribute topics (simple, derived, identity, multilink aggregate)
  • entity set topics
  • enhancements to enumeration topics
  • enhancements to entity table topics
  • options for note placement and heading
  • other enhancements and bug fixes

For more information, please see Generated Model Documentation · openmpp/openmpp.github.io Wiki · GitHub

New 'standard' model files

The source files in the example models in this release have some differences which model developers may wish to incorporate into their models. Examples of these files can be found in the OM_ROOT/models/RiskPaths folder and copied and adapted for your model(s).

  • code/ompp_options.ompp contains commonly modified options statements, such as Model Documentation options.
  • doc/Home.EN.md contains an example starting Home topic in English for Authored Model Documentation
  • doc/Home.FR.md contains an example starting Home topic in English for Authored Model Documentation
  • ompp/Model.vcxproj is an updated Visual Studio project file with updated settings, including documentation content files
  • ompp/Model.vcxproj.filters is an updated Visual Studio project file with updated file types, including documentation content files

For more about the organization of model source and documentation files, please see the following sub-topics:
Model Code · Code folder and source files
Model Code · Doc folder and documentation files

French translations of run log messages

In this release, all normal run log messages, such as run progress messages, now have a French language translation. When a model is run in the UI when the interface language is French, the run log progress messages will also be in French. Some but not necessarily all run-time warning and error messages also have French language versions. Please let us know if you encounter any missing French translations which are visible in the UI.

Function definition of ProcessDevelopmentOptions no longer required in model code

OpenM++ provides a mechanism to create and use model-specific options in a run ini file, as described in
Model Run Options and ini file · openmpp/openmpp.github.io Wiki · GitHub
A definition of the global function ProcessDevelopmentOptions() is required to implement this feature.
An empty version of that function is typically found in the model code module ompp_framework.ompp.
As of this release, the OpenM++ compiler automatically supplies an empty definition of ProcessDevelopmentOptions if a definition is not present in model code.
Consequently, it is no longer necessary to provide an empty definition of ProcessDevelopmentOptions in ompp_framework.ompp.
Model development options continue to function as described in the wiki link above, and could (for example) be used to enable model-specific diagnostic output from a run ini file.

Renamed demo models OzProj and OzProjGen – microdata removed from distribution

The test model OzProjGen was renamed to OzProjGenX and OzProj was renamed to OzProjX. That change in name changes the file sort order, so that OzProjGenX runs before OzProjX in test_models or other scripts. That in turn allows the microdata file produced by OzProjGen and read by OzProj to be removed from the OpenM++ distribution.

Before running OzProjX, be sure the run OzProjGenX first to create the required synthetic microdata file.

This change also illustrates how a model which uses synthetic microdata can be distributed without synthetic microdata by distributing it together with a simple companion model which creates the synthetic microdata. That not only reduces the size of the model distribution, it also by construction ensures that no confidential microdata is released inadvertently.

UI and back-end: do not allow to open parameter, table or microdata if dimension type size or attribute size exceeds the limit

There multiple issues fixed related to large range types handling in back-end and UI. As result it is possible now parameter or table dimension or microdata attribute based on large range type. However by default it is not possible to view parameter, table or microdata in UI if any dimension or attribute has more than 256 items. That value is configurable through OM_CFG_TYPE_MAX_LEN environment variable.

Also, since release v1.16.0 (February 13, 2024) attributes publishable as microdata are filtered by configurable maximum enumerators (option microdata_max_enumerators, default 1000).

Microdata Output · openmpp/openmpp.github.io Wiki · GitHub

Download source code and binaries:

Download release documentation archive:

Download cluster version (MPI):

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.