The Mosel module
mmjobs enables the user to
work with several models concurrently. We show here
a series of examples of basic tasks that typically need
to be performed when working with several models in Mosel:
Parallel computing:
- Running a submodel from another Mosel model: runtestsub.mos (main model
executing testsub.mos)
- Retrieving termination status from submodels (means of coordination of different models):
runsubevnt.mos (main model executing testsub.mos)
- Retrieving user event sent by the submodel:
runsubevnt2.mos (main model executing testsubev.mos)
- Stopping a submodel: runsubwait.mos (main model
executing testsub.mos)
- Compiling to memory: runsubmem.mos (main model
executing testsub.mos)
- Setting runtime parameters: runrtparam.mos (main model
executing rtparams.mos)
- Sequential execution of submodels: runrtparseq.mos
(main model executing rtparams.mos)
- Parallel execution of submodels: runrtparprl.mos
(main model executing rtparams.mos)
- Parallel execution with cloning of submodels: runrtparclone.mos
(main model executing rtparams.mos)
- Job queue for parallel execution of submodels: runrtparqueue.mos
(main model executing rtparams.mos)
- Using the shmem (shared memory) I/O driver for data exchange (bin format): runsubshm.mos
(main model executing testsubshm.mos)
- Using the shmem (shared memory) I/O driver for data exchange (raw format): runsubshmr.mos
(main model executing testsubshmr.mos)
- Using the mempipe (memory pipe) I/O driver for data exchange:
runsubpip.mos (main model executing testsubpip.mos)
- Sharing data between cloned models:
runsubclone.mos (main model executing a copy of itself)
Distributed computing:
- Check for available remote Mosel servers: findservers.mos
- Run a single model on a remote machine: runrtdistr.mos (main model
executing rtparams.mos)
- Run a single model on a remote machine with
configuration options: runrtdistrconf.mos (main model
executing rtparams.mos)
- Running parallel submodels in a distributed architecture: runrtpardistr.mos (main model
executing rtparams3.mos)
- Queuing submodels for parallel execution in a distributed
architecture with one or several models per node: runrtparqueued.mos (main model
executing rtparams3.mos)
- 3-level tree of (parallel) submodels: runrtpartree.mos (main model
executing rtparams2.mos)
- Running a submodel that detaches itself from its parent: runrtdetach.mos (main model
executing rtparams4.mos)
- Using the shmem (shared memory) I/O driver for data exchange (bin format): runsubshmdistr.mos
(main model executing testsubshm.mos)
Further explanation of this example:
Xpress Whitepaper 'Multiple models and parallel
solving with Mosel', Section 'Basic tasks'.
(!*******************************************************
Mosel Example Problems
======================
file runsubevnt.mos
```````````````````
Running a model from another Mosel model,
getting the submodel termination status.
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, May 2006
*******************************************************!)
model "Run model testsub"
uses "mmjobs"
declarations
modSub: Model
ev: Event
end-declarations
! Compile the model file
if compile("testsub.mos")<>0 then exit(1); end-if
load(modSub, "testsub.bim") ! Load the bim file
run(modSub) ! Start model execution
wait(1) ! Wait 1 second for an event
if isqueueempty then ! No event has been sent: model still runs
stop(modSub) ! Stop the model
wait ! Wait for model termination
end-if
ev:=getnextevent ! An event is available: model finished
writeln("Event class: ", getclass(ev))
writeln("Event value: ", getvalue(ev))
writeln("Exit code : ", getexitcode(modSub))
end-model