Welcome to MUSCLE3’s documentation!
MUSCLE3 is the third incarnation of the Multiscale Coupling Library and Environment.
With MUSCLE3, you can connect multiple simulation models together into a multiscale simulation. Simulation models can be as simple as a single Python file, or as complex as a combination of multiple separate simulation codes written in C++ or Fortran, and running on an HPC machine.
Contributors
- University of Amsterdam Computational Science Lab
Original concept, Multiscale Modelling and Simulation Framework (MMSF) coupling theory, original MUSCLE, MUSCLE2.
- Netherlands eScience Center
MUSCLE3 implementation, teaching materials.
- Ignition Computing
Checkpointing implementation and additional development.
This work was supported by the Netherlands eScience Center and NWO under grant number 27015G01.
We would like to acknowledge the contribution by The ITER Organization of results of work carried out within the framework of ITER contract IO/22/CT/4300002587. The views and opinions expressed herein do not necessarily reflect those of the ITER Organization.
Academic collaboration
Please contact prof. Alfons Hoekstra (UvA CSL) and/or Lourens Veen (NLeSC).
Commercial support
Please contact Ignition Computing.
Citing MUSCLE3
If you use MUSCLE3 for scientific work, please cite the version of the MUSCLE3 software you used and the following paper:
Veen L.E., Hoekstra A.G. (2020) Easing Multiscale Model Design and Coupling with MUSCLE3. In: Krzhizhanovskaya V. et al. (eds) Computational Science – ICCS 2020. ICCS 2020. Lecture Notes in Computer Science, vol 12142. Springer, Cham. https://doi.org/10.1007/978-3-030-50433-5_33
- Introduction
- Current status
- Installing
- Tutorial with Python
- Distributed execution
- Profiling coupled simulations
- Coupling your model
- MUSCLE and C++
- MUSCLE and Fortran
- MUSCLE and MPI
- Running containerized applications
- Uncertainty Quantification
- Simulation checkpoints
- Glossary
- User tutorial
- Developer tutorial
- Start situation: components without checkpointing
- Step 1: Set
USES_CHECKPOINT_API
on instance creation - Step 2: Implement checkpoint hooks
- Step 3: Implement resume
- Example: implemented checkpoint hooks and resume
- Components that do not keep state between reuse
- Builtin validation
- Checkpointing in MPI-enabled components
- Tips & tricks
- API Documentation for Python
Grid
Instance
Instance.__init__()
Instance.error_shutdown()
Instance.get_port_length()
Instance.get_setting()
Instance.is_connected()
Instance.is_resizable()
Instance.is_vector_port()
Instance.list_ports()
Instance.list_settings()
Instance.load_snapshot()
Instance.receive()
Instance.receive_with_settings()
Instance.resuming()
Instance.reuse_instance()
Instance.save_final_snapshot()
Instance.save_snapshot()
Instance.send()
Instance.set_port_length()
Instance.should_init()
Instance.should_save_final_snapshot()
Instance.should_save_snapshot()
InstanceFlags
Message
ProfileDatabase
run_simulation()
- API Documentation for C++
- API Documentation for Fortran
- Command line tools