All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
- Support for Python 3.12
- Support for NumPy 2 (already working, constraint removed)
- Fixed
SHUTDOWN_WAIT
profiling event for Python components - Report successful completion on successful completion (instead of an error)
- Fixed crash on SLURM clusters with hyperthreading
- Use psutil instead of netifaces, which is no longer maintained
- Internal improvements and refactoring to support upcoming fixes and features
- Support for Python 3.7
- Warnings about ruamel.yaml, via ymmsl/YAtiML update
- Support for Python 3.11 (working already, now official)
- Enabled type checking support for the libmuscle Python API
- Easier crash debugging due to improved root cause detection
- Fixed crash in profiling timeline plot
- Better performance of timeline plot
- Better visual quality of timeline plot
- Improved profiling of shutdown process
- Fixed crash in profiler for large simulations
- Fixed several (harmless) compiler warnings
- Small documentation rendering improvements
- David for reporting many of these and submitting a fix too!
- Checkpointing is now supported in C++ and Fortran as well
- Added built-in profiling feature
- New object-oriented Fortran API (existing API also still available)
- New
Instance.list_settings()
function - Build support for macOS with CLang and G++/GFortran
- Build support for Cray machines and compilers
- Compiling with MPI and linking without or vice versa is now impossible
- Fixed MessagePack build failure on old OSes
- Fixed resource allocation for instance sets
- Planner now detects
F_INIT
->O_F
loops and gives an error - Manager correctly handles instances that never register
- Last lines of log now printer to screen on error for smoother problem solving
- Various small fixes and improvements
-
Instance.reuse_instance
no longer acceptsapply_overlay
argument. UseInstanceFlags.DONT_APPLY_OVERLAY
when creating the instance instead. -
LIBMUSCLE_Instance_create
signature has changed, this might lead to errors like:.. code-block:: text
30 | instance = LIBMUSCLE_Instance_create(ports, MPI_COMM_WORLD, root_rank) | 1
Error: Type mismatch in argument ‘flags’ at (1); passed INTEGER(4) to TYPE(libmuscle_instanceflags)
You may provide an explicit
InstanceFlags()
argument, or use named arguments:.. code-block:: fortran
instance = LIBMUSCLE_Instance_create(ports, LIBMUSCLE_InstanceFlags(), MPI_COMM_WORLD, root_rank) instance = LIBMUSCLE_Instance_create(ports, communicator=MPI_COMM_WORLD, root=root_rank)
-
DataConstRef
items can no longer be added to aData
containing a list or dict. The newly addedDataConstRef::list
andDataConstRef::dict
should be used instead.
- Maarten at Ignition Computing for implementing much of the above
- Peter for debugging the MessagePack build issue
- Peter, Jon and Gavin for ARCHER2 access and support
- Koen for testing macOS build support
- Everyone who reported issues and contributed feature ideas!
- Connecting multiple conduits to outgoing ports
- Checkpointing (preview, not fully reliable and open to change)
- Clang support
- Intel® compiler support
- Error in case different versions of MUSCLE3 are used
- TCP latency (performance)
- More helpful messages for configuration errors
- Small documentation improvements
- Python 3.6 support
- Maarten at Ignition Computing for implementing much of the above
- The ITER Organisation for funding much of this work
- MUSCLE3 now starts submodels and other components (using QCG-PilotJob)
- Automatic resource management for components on HPC
- Build and installation process now even easier
- Improved error messages and reliability
- Cleaner and more informative logging output
- TCP performance and scalability improvements
- Various issues when building and running on HPC clusters
- Many small fixes
- Python 3.5 support
- Removed gRPC for faster and more reliable builds
- Pipe-based networking, as it had no benefits and some issues
- Stefan, Merijn and Maarten for reporting issues
- Piotr and Bartek for creating and supporting QCG-PilotJob
compute_elements
are now calledcomponents
in .ymmsl files
- Use latest OpenSSL library when installing it automatically
- Handling of non-contiguous and F-order numpy arrays
- C++ memory usage for large dicts/lists now more reasonable
- Improved shutdown when Python submodel crashes
- Logging warning message
- Accessing settings from C++ now more flexible
- Python produces more detailed logs to aid in debugging
- Improved pkg-config set-up
- Improved build system output to help find problems
- Documentation on logging in Python
- Protobuf dependency build now more compatible
- C++ list/dict building functions
- C++ use-after-free when receiving grids
- Pavel for testing and reporting issues
- Dongwei for testing and reporting issues
- Support for sending and receiving multidimensional grids/arrays
- Support for Python 3.8
- Python 3.5.1 support
- Build compatibility on more operating systems
- Olivier for testing, reporting and fixing build issues
- Pavel for testing and reporting build issues
- Hamid for testing and reporting build issues
- Ben for testing and reporting build issues
- Data::key() now returns std::string instead of DataConstRef.
- Data::value() now return Data rather than DataConstRef
- Support for Fortran, including MPI
- Fixes to examples
- Small documentation improvements
- Improved compatibility with other packages using gRPC
- Pavel for reporting documentation/examples issues
- Derek for testing on Eagle
- Dongwei for reporting the gRPC issue
- Support for C++
- Support for MPI in C++
- Cluster/HPC networking
- Fatal logic errors now throw instead of exiting, so that you have a chance to shut down the model cleanly before exiting.
Instance.exit_error()
was replaced byInstance.error_shutdown()
, which no longer exits the process, it just shuts down the Instance.- Central MUSCLE 3-managed settings are called settings everywhere now, not parameters. As a result, the API has changed in several places.
Initial release of MUSCLE 3.
- Coupling different submodel instances
- Spatial and temporal scale separation and overlap
- Settings management
- Combining features
- Python support
- Initial distributed execution capability