Workflows

The kernel runs as a stream: events → ground-up loss → insured loss → summary → output tables. Because the tools are composable, many output workflows are possible. This page shows the common ones as pytools pipelines.

In a real run, oasislmf model run generates run_kernel.sh, which runs these pipelines across several partitions in parallel (evepy p N), connected by named pipes, and concatenates the partition outputs with katpy. For a worked, stage-by-stage walkthrough of a single stream see the step-by-step pipeline example (in the example-models docs).

Two ground-up engines are available: gulmc (full Monte-Carlo, reads the model data directly — the default, used below) and gulpy (consumes modelpy’s CDF stream, i.e. evepy | modelpy | gulpy ). Summary type is selected with summarypy -t gul|il|ri.

Single-output workflows

1. Insured-loss event loss table (ELT)

Run ground-up → FM → summary (portfolio summary set 2) → ELT, per partition, then concatenate:

evepy 1 2 | gulmc -S100 -a1 | fmpy -a2 | summarypy -t il -2 - | eltpy -s elt_p1.csv
evepy 2 2 | gulmc -S100 -a1 | fmpy -a2 | summarypy -t il -2 - | eltpy -s elt_p2.csv
katpy -s -i elt_p1.csv elt_p2.csv -o elt.csv

2. Insured-loss period loss table (PLT)

As above, through pltpy instead:

evepy 1 2 | gulmc -S100 -a1 | fmpy -a2 | summarypy -t il -2 - | pltpy -s plt_p1.csv
evepy 2 2 | gulmc -S100 -a1 | fmpy -a2 | summarypy -t il -2 - | pltpy -s plt_p2.csv

3. Loss exceedance curves (EPT)

lecpy (like aalpy) is not a stream stage — it reads all of a summary set’s binaries from work/, since EP curves are not valid on an event subset. Write the summary binaries over multiple partitions, then run lecpy once:

evepy 1 2 | gulmc -S100 -a1 | fmpy -a2 | summarypy -t il -2 - > work/summary2/p1.bin
evepy 2 2 | gulmc -S100 -a1 | fmpy -a2 | summarypy -t il -2 - > work/summary2/p2.bin
lecpy -K summary2 -O ept.csv -F -f        # full-uncertainty AEP + OEP

4. Average annual loss (AAL)

Same pattern; aalpy reads the summary binaries from work/:

evepy 1 2 | gulmc -S100 -a1 | fmpy -a2 | summarypy -t il -2 - > work/summary2/p1.bin
evepy 2 2 | gulmc -S100 -a1 | fmpy -a2 | summarypy -t il -2 - > work/summary2/p2.bin
aalpy -K summary2 -a aal.csv

Multiple-output workflows

5. Ground-up and insured loss together

tee the ground-up stream: one copy to a GUL summary, the other on into fmpy for the insured summary — both perspectives from one run:

evepy 1 2 | gulmc -S100 -a1 | tee >(summarypy -t gul -2 - | eltpy -s gul_elt_p1.csv) \
          | fmpy -a2 | summarypy -t il -2 - | eltpy -s il_elt_p1.csv

6. Multiple summary levels

summarypy can emit several user-defined summary levels at once (up to 10); each can feed a different output tool:

evepy 1 2 | gulmc -S100 -a1 | fmpy -a2 | summarypy -t il -1 s1/p1.bin -2 s2/p1.bin
eltpy -i s1/p1.bin -s elt_s1_p1.csv
eltpy -i s2/p1.bin -s elt_s2_p1.csv

Financial Module (reinsurance) workflows

fmpy is recursive: chain calls to apply successive sets of terms (direct insurance, then reinsurance inuring priorities), each with its own input folder via -p, and -n for net losses:

evepy 1 2 | gulmc -S100 -a1 | fmpy -p direct | fmpy -p ri1 -n > ri1_net_p1.bin
evepy 2 2 | gulmc -S100 -a1 | fmpy -p direct | fmpy -p ri1 -n > ri1_net_p2.bin

Each fmpy call reads the four fm_* input files from its -p folder, so a direct + reinsurance run keeps a direct/ and ri1/ (etc.) set of inputs. All perspectives (gross direct, net of each reinsurance layer) can be summarised and output in one workflow. See Financial Module for the FM concepts.


See also: Core components · Output components · 3. Specification.