FUSE Introductory Tutorial

Download this tutorial from the FuseExamples repository

Basic concepts

To make sense of this tutorial, you'll need to know the following organization concepts of FUSE:

  1. 📂 Data storage: All data is stored in the dd structure, which follows the ITER IMAS ontology.
  2. 🧠 Actors: The core components of FUSE simulations are physics and engineering actors.
  3. 🕹️ Control: Actor functionality is governed by act parameters.
  4. 🚀 Initialization: The data structure can be initialized from 0D ini parameters.
  5. 🔧 Use cases: FUSE includes templates for various machines (e.g., FPP, ITER, ARC).
  6. 🔄 Workflows: Self-contained studies and optimizations are conducted via workflows, typically involving multiple FUSE simulations.
  7. 🌍 Interoperability: FUSE interfaces with existing modeling tools like OMFIT/OMAS and the IMAS ecosystem.

A diagram illustrating these concepts is provided below: image.png

Let's get started!


NOTE: Julia is a Just In Time (JIT) programming language. The first time something is executed it will take longer because of the compilation process. Subsequent calls the the same code will be blazingly fast.


Import the necessary packages

using Plots # for plotting
using FUSE # this will also import IMAS in the current namespace

Starting from a use-case

FUSE comes with some predefined use-cases, some of which are used for regression testing.

Note that some use cases are for non-nuclear experiments and certain Actors like Blankets or BalanceOfPlant will not perform any actions.

Here's the list of supported use-cases. These can be customized and you will also be able to build your own.

methods(FUSE.case_parameters)
# 26 methods for generic function case_parameters from FUSE:

Get initial parameters (ini) and actions (act) for a given use-case, let's use KDEMO for example

ini, act = FUSE.case_parameters(:KDEMO);

The ini data structure contains 0D parameters that will be used to bootstrap the dd with plausible data.

The ini parameters can be modified.

ini.equilibrium.B0 = 7.8
ini.equilibrium.R0 = 6.5;

The act data structure contains parameters that define how the actors (ie the models) will behave.

The act parameters can also be modified.

act.ActorCoreTransport.model = :FluxMatcher;

ini and act can now be used to initialize the data dictionary (dd) using the 0D parameters.

NOTE: init() does not return a self-consistent solution, just a plausible starting point to initialize our simulations!

dd = IMAS.dd() # an empty dd
FUSE.init(dd, ini, act);
actors: Equilibrium
actors:  TEQUILA
actors: CXbuild
actors: HCD
actors:  SimpleEC
actors:  SimpleIC
actors:  NeutralFueling
actors: Current
actors:  QED
actors: PassiveStructures

Let's see what we got

plot(dd.build)
Example block output

We can @checkin and @checkout variables with an associated tag.

This is handy to save and restore (checkpoint) our progress without having to always start from scratch (we'll use this later).

@checkin :init dd ini act

Running Actors

Let's now run a series of actors and play around with plotting to get a sense of what each individual actor does.

Here's how we can restore things back to after the initialization stage (in case we did anything else in between)

@checkout :init dd ini act

Actors in FUSE can be executed by passing two arguments to them: dd and act.

Let's start by positioning the PF coils, so that we stand a chance to reproduce the desired plasma shape. This will be important to ensure the stability of the ActorStationaryPlasma that we are going to run next.

FUSE.ActorPFdesign(dd, act; do_plot=true); # instead of setting `act.ActorPFdesign.do_plot=true` we can just pass `do_plot=true` as argument without chaning `act`
actors: PFdesign

The ActorStationaryPlasma iterates between plasma transport, pedestal, equilibrium and sources to return a self-consistent plasma solution

peq = plot(dd.equilibrium; label="before")
pcp = plot(dd.core_profiles; color=:gray, label="before")
act.ActorFluxMatcher.verbose = true
act.ActorFluxMatcher.algorithm = :anderson
#act.ActorFluxMatcher.step_size = 0.1
FUSE.ActorStationaryPlasma(dd, act);
actors: StationaryPlasma
actors:  --------------- 1/5
actors:  HCD
actors:   SimpleEC
actors:   SimpleIC
actors:   NeutralFueling
actors:  Current
actors:   QED
actors:  Pedestal
actors:   EPED
actors:  CoreTransport
actors:   FluxMatcher

Calls: 2    Time: 0:00:35
            error: 2.3986908585174067
     Pfusion [MW]: 634.0791758542064
        Ti0 [keV]: 26.763527621791134
        Te0 [keV]: 26.763527621791035
   ne0 [10²⁰ m⁻³]: 0.8669486753400703














Calls: 3    Time: 0:00:40
            error: 2.4614868208460283
     Pfusion [MW]: 635.3244168817072
        Ti0 [keV]: 26.81800244723871
        Te0 [keV]: 26.7851959957034
   ne0 [10²⁰ m⁻³]: 0.8673072946708019














Calls: 4    Time: 0:00:40
            error: 2.0887143164233883
     Pfusion [MW]: 631.4452517654125
        Ti0 [keV]: 26.487088034196155
        Te0 [keV]: 26.626023318725647
   ne0 [10²⁰ m⁻³]: 0.8682166117985088














Calls: 12    Time: 0:00:41
            error: 0.5748248259756704
     Pfusion [MW]: 377.2784763031667
        Ti0 [keV]: 16.877790836133844
        Te0 [keV]: 20.07030183472628
   ne0 [10²⁰ m⁻³]: 0.8388732871881687














Calls: 20    Time: 0:00:41
            error: 0.3315339331880565
     Pfusion [MW]: 332.637719207414
        Ti0 [keV]: 14.139370068164519
        Te0 [keV]: 17.27883694752957
   ne0 [10²⁰ m⁻³]: 0.8353913005026815














Calls: 28    Time: 0:00:41
            error: 0.30966377732053174
     Pfusion [MW]: 342.4968502719946
        Ti0 [keV]: 14.548196141520041
        Te0 [keV]: 17.61268336832543
   ne0 [10²⁰ m⁻³]: 0.843593988387252














Calls: 35    Time: 0:00:41
            error: 0.23563866812236461
     Pfusion [MW]: 334.9394993114931
        Ti0 [keV]: 14.282434163647961
        Te0 [keV]: 17.16991949453304
   ne0 [10²⁰ m⁻³]: 0.8557200738680778














Calls: 43    Time: 0:00:41
            error: 0.22406307172654308
     Pfusion [MW]: 343.18588343439046
        Ti0 [keV]: 14.62018912950536
        Te0 [keV]: 17.246694259404162
   ne0 [10²⁰ m⁻³]: 0.8574989756474631














Calls: 52    Time: 0:00:41
            error: 0.18857306632486773
     Pfusion [MW]: 315.87816673363636
        Ti0 [keV]: 14.521194074156549
        Te0 [keV]: 16.799122865825133
   ne0 [10²⁰ m⁻³]: 0.8499447961876682














Calls: 60    Time: 0:00:41
            error: 0.13671572946487928
     Pfusion [MW]: 307.45107748136195
        Ti0 [keV]: 15.005346216177593
        Te0 [keV]: 16.450710588985714
   ne0 [10²⁰ m⁻³]: 0.838695541114725














Calls: 68    Time: 0:00:41
            error: 0.07578616312600918
     Pfusion [MW]: 302.3111019388411
        Ti0 [keV]: 15.616166694252628
        Te0 [keV]: 16.26765800354774
   ne0 [10²⁰ m⁻³]: 0.8195040034804898














Calls: 74    Time: 0:00:41
            error: 0.06489132510086235
     Pfusion [MW]: 301.0243446938595
        Ti0 [keV]: 15.884065154474778
        Te0 [keV]: 16.330424157687183
   ne0 [10²⁰ m⁻³]: 0.813565260456495














Calls: 82    Time: 0:00:42
            error: 0.04699481160060391
     Pfusion [MW]: 292.325086053235
        Ti0 [keV]: 15.85201584863897
        Te0 [keV]: 16.49269193999743
   ne0 [10²⁰ m⁻³]: 0.8115298861971308














Calls: 90    Time: 0:00:42
            error: 0.04326110719840164
     Pfusion [MW]: 289.1419199472008
        Ti0 [keV]: 15.790086071170848
        Te0 [keV]: 16.507772776015305
   ne0 [10²⁰ m⁻³]: 0.8132782770278866














Calls: 97    Time: 0:00:42
            error: 0.0405504807409857
     Pfusion [MW]: 286.44411918618283
        Ti0 [keV]: 15.73865495692863
        Te0 [keV]: 16.53068792224855
   ne0 [10²⁰ m⁻³]: 0.8130588912607825














Calls: 104    Time: 0:00:42
            error: 0.03429026974899001
     Pfusion [MW]: 286.0939991368867
        Ti0 [keV]: 15.630054310295458
        Te0 [keV]: 16.56150879662306
   ne0 [10²⁰ m⁻³]: 0.8140675260522887














Calls: 109    Time: 0:00:42
            error: 0.03385201225893676
     Pfusion [MW]: 285.4406040554951
        Ti0 [keV]: 15.592412597273066
        Te0 [keV]: 16.579139584784635
   ne0 [10²⁰ m⁻³]: 0.814186116963917














Calls: 117    Time: 0:00:42
            error: 0.02806726176387883
     Pfusion [MW]: 279.9547917231178
        Ti0 [keV]: 15.518101065481869
        Te0 [keV]: 16.59053357128785
   ne0 [10²⁰ m⁻³]: 0.8136952970921509














Calls: 125    Time: 0:00:42
            error: 0.025751775345857326
     Pfusion [MW]: 275.3134178036743
        Ti0 [keV]: 15.501350317407962
        Te0 [keV]: 16.60073728207267
   ne0 [10²⁰ m⁻³]: 0.8122450157599036














Calls: 132    Time: 0:00:42
            error: 0.024357864094518806
     Pfusion [MW]: 275.43556400669576
        Ti0 [keV]: 15.501579009527953
        Te0 [keV]: 16.57927734768273
   ne0 [10²⁰ m⁻³]: 0.8128428777308524














Calls: 139    Time: 0:00:42
            error: 0.021726285744860366
     Pfusion [MW]: 275.19404044803525
        Ti0 [keV]: 15.549040079821317
        Te0 [keV]: 16.565271614852257
   ne0 [10²⁰ m⁻³]: 0.8118011523516607














Calls: 145    Time: 0:00:43
            error: 0.019886382450209187
     Pfusion [MW]: 277.041277062134
        Ti0 [keV]: 15.575071399438476
        Te0 [keV]: 16.565312571106276
   ne0 [10²⁰ m⁻³]: 0.8111961200313725














Calls: 153    Time: 0:00:43
            error: 0.01684208436390496
     Pfusion [MW]: 276.965882947599
        Ti0 [keV]: 15.61814497450816
        Te0 [keV]: 16.564809461933805
   ne0 [10²⁰ m⁻³]: 0.8106076226793643




actors:    Pedestal
actors:     EPED
actors:    FluxCalculator
actors:     TGLF
actors:     Neoclassical











Calls: 154    Time: 0:00:43
            error: 0.016876449178285857
     Pfusion [MW]: 276.9659117100103
        Ti0 [keV]: 15.6178983711363
        Te0 [keV]: 16.56465781409598
   ne0 [10²⁰ m⁻³]: 0.8106082080580952
actors:  Current
actors:   QED
actors:  Equilibrium
actors:   TEQUILA
actors:  --------------- 1/5 @ 673.78%
actors:  HCD
actors:   SimpleEC
actors:   SimpleIC
actors:   NeutralFueling
actors:  Current
actors:   QED
actors:  Pedestal
actors:   EPED
actors:  CoreTransport
actors:   FluxMatcher

Calls: 8    Time: 0:00:00
            error: 0.9333853834867548
     Pfusion [MW]: 402.6387899723012
        Ti0 [keV]: 16.446489407127952
        Te0 [keV]: 16.265493447929035
   ne0 [10²⁰ m⁻³]: 0.8750659642209214














Calls: 15    Time: 0:00:00
            error: 0.5273245630033004
     Pfusion [MW]: 423.0568916584847
        Ti0 [keV]: 16.441026285476525
        Te0 [keV]: 16.27614055704596
   ne0 [10²⁰ m⁻³]: 0.9120969909533151














Calls: 22    Time: 0:00:00
            error: 2.258156543922321
     Pfusion [MW]: 456.7728324306802
        Ti0 [keV]: 16.990152713229122
        Te0 [keV]: 24.880277622960506
   ne0 [10²⁰ m⁻³]: 0.9435650260023571














Calls: 29    Time: 0:00:00
            error: 2.164519732354367
     Pfusion [MW]: 449.4988170783489
        Ti0 [keV]: 16.85081871401836
        Te0 [keV]: 24.18961877803571
   ne0 [10²⁰ m⁻³]: 0.9396747823239429














Calls: 35    Time: 0:00:00
            error: 0.4908620344492978
     Pfusion [MW]: 442.06895760137036
        Ti0 [keV]: 16.72633911130287
        Te0 [keV]: 16.737280676374215
   ne0 [10²⁰ m⁻³]: 0.9396357437497053














Calls: 43    Time: 0:00:00
            error: 2.3619388952376195
     Pfusion [MW]: 467.3670978020125
        Ti0 [keV]: 17.195740649662685
        Te0 [keV]: 24.896339912727974
   ne0 [10²⁰ m⁻³]: 0.9585075163589716














Calls: 51    Time: 0:00:00
            error: 0.4354276004858547
     Pfusion [MW]: 461.8700293003753
        Ti0 [keV]: 17.076679005401193
        Te0 [keV]: 17.537257763117204
   ne0 [10²⁰ m⁻³]: 0.9558473512357062














Calls: 58    Time: 0:00:00
            error: 2.596067327759832
     Pfusion [MW]: 474.3760835641809
        Ti0 [keV]: 17.314214552682053
        Te0 [keV]: 25.33941316284127
   ne0 [10²⁰ m⁻³]: 0.9589219897453712














Calls: 65    Time: 0:00:01
            error: 0.37672017283850545
     Pfusion [MW]: 460.0700164085883
        Ti0 [keV]: 17.051023907975534
        Te0 [keV]: 17.47600153760577
   ne0 [10²⁰ m⁻³]: 0.9536237592941127














Calls: 71    Time: 0:00:01
            error: 2.620580152295258
     Pfusion [MW]: 472.9258976624903
        Ti0 [keV]: 17.345604374969064
        Te0 [keV]: 25.497086394970413
   ne0 [10²⁰ m⁻³]: 0.9535446621148485














Calls: 77    Time: 0:00:01
            error: 2.7258733948473135
     Pfusion [MW]: 477.5139211107028
        Ti0 [keV]: 17.405658200734877
        Te0 [keV]: 25.64292973849589
   ne0 [10²⁰ m⁻³]: 0.9580360205289469














Calls: 85    Time: 0:00:01
            error: 3.094858154319108
     Pfusion [MW]: 480.98532405789433
        Ti0 [keV]: 17.43396617857723
        Te0 [keV]: 25.816394214991288
   ne0 [10²⁰ m⁻³]: 0.9612021909517666














Calls: 93    Time: 0:00:01
            error: 3.404916974619039
     Pfusion [MW]: 485.7282817227455
        Ti0 [keV]: 17.47677610120413
        Te0 [keV]: 26.202291750065616
   ne0 [10²⁰ m⁻³]: 0.963705108618467














Calls: 100    Time: 0:00:01
            error: 3.2787265117721356
     Pfusion [MW]: 480.7813914949859
        Ti0 [keV]: 17.39576546481814
        Te0 [keV]: 25.828105629393164
   ne0 [10²⁰ m⁻³]: 0.9625062568647114














Calls: 107    Time: 0:00:01
            error: 0.8794023370296025
     Pfusion [MW]: 461.8762660918319
        Ti0 [keV]: 17.10106295036858
        Te0 [keV]: 17.18176832103525
   ne0 [10²⁰ m⁻³]: 0.9551183172450242














Calls: 113    Time: 0:00:01
            error: 1.09135437922772
     Pfusion [MW]: 474.17160285696207
        Ti0 [keV]: 17.254571080802318
        Te0 [keV]: 17.855302653243914
   ne0 [10²⁰ m⁻³]: 0.9617410995909152














Calls: 121    Time: 0:00:01
            error: 0.5142261214073783
     Pfusion [MW]: 469.029721621135
        Ti0 [keV]: 17.32239648750361
        Te0 [keV]: 17.791693993420136
   ne0 [10²⁰ m⁻³]: 0.9523748913050661














Calls: 129    Time: 0:00:02
            error: 0.2884604292974111
     Pfusion [MW]: 471.21756781917964
        Ti0 [keV]: 17.48289728801131
        Te0 [keV]: 17.997278710418684
   ne0 [10²⁰ m⁻³]: 0.9469030715853705














Calls: 136    Time: 0:00:02
            error: 0.2402584670838217
     Pfusion [MW]: 475.3903844938617
        Ti0 [keV]: 17.6463069228663
        Te0 [keV]: 18.0468169413905
   ne0 [10²⁰ m⁻³]: 0.9432393598773843














Calls: 143    Time: 0:00:02
            error: 0.19002446708828952
     Pfusion [MW]: 460.2888679535886
        Ti0 [keV]: 17.23550093351086
        Te0 [keV]: 17.57807771516278
   ne0 [10²⁰ m⁻³]: 0.9352507791896468














Calls: 149    Time: 0:00:02
            error: 0.1544966777094191
     Pfusion [MW]: 442.3105979325322
        Ti0 [keV]: 16.771921243651235
        Te0 [keV]: 16.920690089738297
   ne0 [10²⁰ m⁻³]: 0.9250313757723214














Calls: 155    Time: 0:00:02
            error: 0.1236817726227274
     Pfusion [MW]: 427.2965679682141
        Ti0 [keV]: 16.326467487109323
        Te0 [keV]: 16.350396955502166
   ne0 [10²⁰ m⁻³]: 0.9217452799181326














Calls: 163    Time: 0:00:02
            error: 0.1086175604550474
     Pfusion [MW]: 422.3398231513146
        Ti0 [keV]: 16.160456761758695
        Te0 [keV]: 16.157476027623655
   ne0 [10²⁰ m⁻³]: 0.9224746823917165














Calls: 170    Time: 0:00:02
            error: 0.10262332947053096
     Pfusion [MW]: 419.19955076258844
        Ti0 [keV]: 16.079210261765102
        Te0 [keV]: 16.06168139445888
   ne0 [10²⁰ m⁻³]: 0.9222146334249943














Calls: 177    Time: 0:00:02
            error: 0.09356025471198291
     Pfusion [MW]: 418.66746983842137
        Ti0 [keV]: 16.120906771873724
        Te0 [keV]: 16.092480806355066
   ne0 [10²⁰ m⁻³]: 0.9221011425114566














Calls: 184    Time: 0:00:02
            error: 0.08877373539401878
     Pfusion [MW]: 418.23631104498213
        Ti0 [keV]: 16.158162079330445
        Te0 [keV]: 16.0973716857977
   ne0 [10²⁰ m⁻³]: 0.9222314123129531














Calls: 189    Time: 0:00:03
            error: 0.08450457679025677
     Pfusion [MW]: 416.72325431407967
        Ti0 [keV]: 16.16421323186422
        Te0 [keV]: 16.05415716609417
   ne0 [10²⁰ m⁻³]: 0.9220706849422674














Calls: 196    Time: 0:00:03
            error: 0.0815487132948622
     Pfusion [MW]: 414.71653035741383
        Ti0 [keV]: 16.184599375951066
        Te0 [keV]: 16.00706858531336
   ne0 [10²⁰ m⁻³]: 0.922068010796931














Calls: 204    Time: 0:00:03
            error: 0.08042260061510827
     Pfusion [MW]: 413.7270026963523
        Ti0 [keV]: 16.203399185741844
        Te0 [keV]: 15.995465690640756
   ne0 [10²⁰ m⁻³]: 0.9220165799013506














Calls: 211    Time: 0:00:03
            error: 0.0772303849876127
     Pfusion [MW]: 411.95178956041667
        Ti0 [keV]: 16.300990678908892
        Te0 [keV]: 16.09168326389407
   ne0 [10²⁰ m⁻³]: 0.9223586650342469














Calls: 218    Time: 0:00:03
            error: 0.07540450333567814
     Pfusion [MW]: 410.1582138447046
        Ti0 [keV]: 16.33336785636744
        Te0 [keV]: 16.08130787880417
   ne0 [10²⁰ m⁻³]: 0.9227502610274594














Calls: 225    Time: 0:00:03
            error: 0.07447922898716398
     Pfusion [MW]: 410.2254289430811
        Ti0 [keV]: 16.419078042182772
        Te0 [keV]: 16.18213077537102
   ne0 [10²⁰ m⁻³]: 0.9238481645043053














Calls: 230    Time: 0:00:03
            error: 0.07419122386273248
     Pfusion [MW]: 410.06705178594314
        Ti0 [keV]: 16.485203245507275
        Te0 [keV]: 16.253518552930412
   ne0 [10²⁰ m⁻³]: 0.9245027478794258














Calls: 238    Time: 0:00:03
            error: 0.07342772633198005
     Pfusion [MW]: 409.82835384692856
        Ti0 [keV]: 16.692419315757128
        Te0 [keV]: 16.47177009582757
   ne0 [10²⁰ m⁻³]: 0.9262512353299162














Calls: 246    Time: 0:00:03
            error: 0.07267907147890779
     Pfusion [MW]: 410.7165757792642
        Ti0 [keV]: 16.90025576465987
        Te0 [keV]: 16.71157417369924
   ne0 [10²⁰ m⁻³]: 0.9276869312201037














Calls: 253    Time: 0:00:04
            error: 0.07209071635070348
     Pfusion [MW]: 411.70822623349
        Ti0 [keV]: 17.089311029155073
        Te0 [keV]: 16.938510591902556
   ne0 [10²⁰ m⁻³]: 0.9293262550916588














Calls: 260    Time: 0:00:04
            error: 0.0691340782798401
     Pfusion [MW]: 415.07061896869254
        Ti0 [keV]: 17.631527282341246
        Te0 [keV]: 17.607482814524083
   ne0 [10²⁰ m⁻³]: 0.9339691106121815














Calls: 265    Time: 0:00:04
            error: 0.06649362997498519
     Pfusion [MW]: 418.2438733751234
        Ti0 [keV]: 18.070123644814082
        Te0 [keV]: 18.168633091068635
   ne0 [10²⁰ m⁻³]: 0.9375949262130364














Calls: 273    Time: 0:00:04
            error: 0.06827319291386384
     Pfusion [MW]: 427.29245651442017
        Ti0 [keV]: 19.20213497217403
        Te0 [keV]: 19.711848152415165
   ne0 [10²⁰ m⁻³]: 0.9483936859711626














Calls: 280    Time: 0:00:04
            error: 0.045363400915444586
     Pfusion [MW]: 424.8348795942146
        Ti0 [keV]: 18.777679215902893
        Te0 [keV]: 19.183817870843136
   ne0 [10²⁰ m⁻³]: 0.9467973801589381














Calls: 287    Time: 0:00:04
            error: 0.027050445264048845
     Pfusion [MW]: 429.7341632812979
        Ti0 [keV]: 19.191545978913837
        Te0 [keV]: 19.812812378893902
   ne0 [10²⁰ m⁻³]: 0.9558467941913087














Calls: 294    Time: 0:00:04
            error: 0.01753980286073532
     Pfusion [MW]: 430.6446149877348
        Ti0 [keV]: 19.24308535680505
        Te0 [keV]: 19.894377346256338
   ne0 [10²⁰ m⁻³]: 0.9579157351369164




actors:    Pedestal
actors:     EPED
actors:    FluxCalculator
actors:     TGLF
actors:     Neoclassical











Calls: 295    Time: 0:00:04
            error: 0.017942905656534298
     Pfusion [MW]: 430.63859959401617
        Ti0 [keV]: 19.24298563055952
        Te0 [keV]: 19.89461613838067
   ne0 [10²⁰ m⁻³]: 0.9579029664723094
actors:  Current
actors:   QED
actors:  Equilibrium
actors:   TEQUILA
actors:  --------------- 2/5 @ 642.51%
actors:  HCD
actors:   SimpleEC
actors:   SimpleIC
actors:   NeutralFueling
actors:  Current
actors:   QED
actors:  Pedestal
actors:   EPED
actors:  CoreTransport
actors:   FluxMatcher

Calls: 9    Time: 0:00:00
            error: 1.2669876433296703
     Pfusion [MW]: 249.44419838986718
        Ti0 [keV]: 16.710371660505547
        Te0 [keV]: 16.888643519326592
   ne0 [10²⁰ m⁻³]: 0.8931681580472651














Calls: 18    Time: 0:00:00
            error: 0.5981734275131763
     Pfusion [MW]: 224.3891870989048
        Ti0 [keV]: 15.9057729710509
        Te0 [keV]: 15.807624118282366
   ne0 [10²⁰ m⁻³]: 0.8741609531241487














Calls: 25    Time: 0:00:00
            error: 0.366872251349858
     Pfusion [MW]: 211.67270372134416
        Ti0 [keV]: 15.38902787966812
        Te0 [keV]: 15.083405635070504
   ne0 [10²⁰ m⁻³]: 0.8725034406662259














Calls: 34    Time: 0:00:00
            error: 0.18280852246867793
     Pfusion [MW]: 198.09206252590062
        Ti0 [keV]: 14.906604516722918
        Te0 [keV]: 14.297397634548357
   ne0 [10²⁰ m⁻³]: 0.8743406496434163














Calls: 42    Time: 0:00:00
            error: 0.1525592850590289
     Pfusion [MW]: 192.44958970783176
        Ti0 [keV]: 14.76069070129253
        Te0 [keV]: 14.006954222030949
   ne0 [10²⁰ m⁻³]: 0.8719582569769265














Calls: 50    Time: 0:00:00
            error: 0.14063084838491668
     Pfusion [MW]: 192.60511685097504
        Ti0 [keV]: 14.932665622823269
        Te0 [keV]: 14.095766155083247
   ne0 [10²⁰ m⁻³]: 0.8700792769515808














Calls: 58    Time: 0:00:00
            error: 0.11662285960858025
     Pfusion [MW]: 196.02076814338338
        Ti0 [keV]: 15.472792907675826
        Te0 [keV]: 14.517972623675254
   ne0 [10²⁰ m⁻³]: 0.8702113845822455














Calls: 67    Time: 0:00:00
            error: 0.10519761622234552
     Pfusion [MW]: 198.4394621044829
        Ti0 [keV]: 15.733387520251629
        Te0 [keV]: 14.809523656788123
   ne0 [10²⁰ m⁻³]: 0.8741710989017166














Calls: 76    Time: 0:00:01
            error: 0.09659858391567581
     Pfusion [MW]: 201.8153731341421
        Ti0 [keV]: 16.026309825749255
        Te0 [keV]: 15.235976334695822
   ne0 [10²⁰ m⁻³]: 0.8764215753268971














Calls: 84    Time: 0:00:01
            error: 0.09308726370963542
     Pfusion [MW]: 203.19888446609363
        Ti0 [keV]: 16.061415755352826
        Te0 [keV]: 15.42566553998429
   ne0 [10²⁰ m⁻³]: 0.8779098714493692














Calls: 92    Time: 0:00:01
            error: 0.09100013957620669
     Pfusion [MW]: 205.49779925019843
        Ti0 [keV]: 16.138501722013626
        Te0 [keV]: 15.67686451568466
   ne0 [10²⁰ m⁻³]: 0.8810036367430112














Calls: 99    Time: 0:00:01
            error: 0.08892706149688552
     Pfusion [MW]: 208.79545660033432
        Ti0 [keV]: 16.31707829888939
        Te0 [keV]: 15.945864265198823
   ne0 [10²⁰ m⁻³]: 0.8825786814985526














Calls: 108    Time: 0:00:01
            error: 0.08797667386961891
     Pfusion [MW]: 210.11952612283423
        Ti0 [keV]: 16.390870016851668
        Te0 [keV]: 16.02437757042633
   ne0 [10²⁰ m⁻³]: 0.8831033715129121














Calls: 117    Time: 0:00:01
            error: 0.08461035191210693
     Pfusion [MW]: 215.9927683890125
        Ti0 [keV]: 16.574687695256067
        Te0 [keV]: 16.361312254052887
   ne0 [10²⁰ m⁻³]: 0.8854707617610849














Calls: 125    Time: 0:00:01
            error: 0.07977681136872503
     Pfusion [MW]: 222.2420156625514
        Ti0 [keV]: 16.707125297608773
        Te0 [keV]: 16.63600060982365
   ne0 [10²⁰ m⁻³]: 0.8863899533552311














Calls: 133    Time: 0:00:01
            error: 0.07278595745664694
     Pfusion [MW]: 228.71724567773876
        Ti0 [keV]: 16.810588062230593
        Te0 [keV]: 16.90973290740146
   ne0 [10²⁰ m⁻³]: 0.8885326079461185














Calls: 140    Time: 0:00:01
            error: 0.06273524576975179
     Pfusion [MW]: 235.4388522326277
        Ti0 [keV]: 16.876542288625433
        Te0 [keV]: 17.25181849685001
   ne0 [10²⁰ m⁻³]: 0.8908296707386627














Calls: 149    Time: 0:00:02
            error: 0.05634424231386013
     Pfusion [MW]: 235.52120759628312
        Ti0 [keV]: 16.881946012319474
        Te0 [keV]: 17.255392909799188
   ne0 [10²⁰ m⁻³]: 0.8884454360678202














Calls: 158    Time: 0:00:02
            error: 0.05115989261717108
     Pfusion [MW]: 238.10841113271044
        Ti0 [keV]: 16.961051610989735
        Te0 [keV]: 17.377717659828196
   ne0 [10²⁰ m⁻³]: 0.884344446380512














Calls: 166    Time: 0:00:02
            error: 0.04165976604650165
     Pfusion [MW]: 244.38132195671136
        Ti0 [keV]: 17.102840516478544
        Te0 [keV]: 17.657317191095686
   ne0 [10²⁰ m⁻³]: 0.8820055867295734














Calls: 174    Time: 0:00:02
            error: 0.0360124517972916
     Pfusion [MW]: 245.73100697902706
        Ti0 [keV]: 17.135674181095133
        Te0 [keV]: 17.71074055393762
   ne0 [10²⁰ m⁻³]: 0.8823721646742154














Calls: 180    Time: 0:00:02
            error: 0.030138254815394276
     Pfusion [MW]: 246.71958421086984
        Ti0 [keV]: 17.194936821706488
        Te0 [keV]: 17.76563343708868
   ne0 [10²⁰ m⁻³]: 0.8824505089233736














Calls: 189    Time: 0:00:02
            error: 0.026547416678086338
     Pfusion [MW]: 248.09244168781424
        Ti0 [keV]: 17.27375876205899
        Te0 [keV]: 17.873257287034114
   ne0 [10²⁰ m⁻³]: 0.882241945055964














Calls: 198    Time: 0:00:02
            error: 0.017574296072692636
     Pfusion [MW]: 249.28609782234918
        Ti0 [keV]: 17.35548203341253
        Te0 [keV]: 18.096500271943945
   ne0 [10²⁰ m⁻³]: 0.8836677478658871




actors:    Pedestal
actors:     EPED
actors:    FluxCalculator
actors:     TGLF
actors:     Neoclassical











Calls: 204    Time: 0:00:02
            error: 0.015502445969252283
     Pfusion [MW]: 249.3759463131943
        Ti0 [keV]: 17.36966886831599
        Te0 [keV]: 18.148717152928356
   ne0 [10²⁰ m⁻³]: 0.883913414811802
actors:  Current
actors:   QED
actors:  Equilibrium
actors:   TEQUILA
actors:  --------------- 3/5 @ 348.50%
actors:  HCD
actors:   SimpleEC
actors:   SimpleIC
actors:   NeutralFueling
actors:  Current
actors:   QED
actors:  Pedestal
actors:   EPED
actors:  CoreTransport
actors:   FluxMatcher

Calls: 7    Time: 0:00:00
            error: 1.9568160728071302
     Pfusion [MW]: 280.96387402781886
        Ti0 [keV]: 17.634323046911565
        Te0 [keV]: 18.444727026291744
   ne0 [10²⁰ m⁻³]: 0.9016390564884212














Calls: 14    Time: 0:00:00
            error: 2.512662999040727
     Pfusion [MW]: 279.8341442244965
        Ti0 [keV]: 17.629745850753405
        Te0 [keV]: 18.43880342294206
   ne0 [10²⁰ m⁻³]: 0.8998284434239694














Calls: 22    Time: 0:00:00
            error: 3.440661603521881
     Pfusion [MW]: 278.3103007991179
        Ti0 [keV]: 17.656316989759965
        Te0 [keV]: 18.4122219533473
   ne0 [10²⁰ m⁻³]: 0.901826054355367














Calls: 30    Time: 0:00:00
            error: 4.284320633366127
     Pfusion [MW]: 276.4680927374492
        Ti0 [keV]: 17.62601873530142
        Te0 [keV]: 18.42638162228532
   ne0 [10²⁰ m⁻³]: 0.894222990229235














Calls: 37    Time: 0:00:00
            error: 4.624982266861176
     Pfusion [MW]: 278.87001378266535
        Ti0 [keV]: 17.64980288858206
        Te0 [keV]: 18.409004610596902
   ne0 [10²⁰ m⁻³]: 0.9021683486097752














Calls: 44    Time: 0:00:00
            error: 3.658897974647487
     Pfusion [MW]: 277.7952734537536
        Ti0 [keV]: 17.662200629396022
        Te0 [keV]: 18.402715390619587
   ne0 [10²⁰ m⁻³]: 0.9020450418869496














Calls: 51    Time: 0:00:00
            error: 2.7705335093175876
     Pfusion [MW]: 280.413438695549
        Ti0 [keV]: 17.647927980890188
        Te0 [keV]: 18.43762476121313
   ne0 [10²⁰ m⁻³]: 0.9039184203924682














Calls: 56    Time: 0:00:00
            error: 3.2689170109094476
     Pfusion [MW]: 280.0042151024375
        Ti0 [keV]: 17.658605426790576
        Te0 [keV]: 18.411799435505753
   ne0 [10²⁰ m⁻³]: 0.9053893803696893














Calls: 63    Time: 0:00:01
            error: 3.279265090304171
     Pfusion [MW]: 278.69188472302955
        Ti0 [keV]: 17.646349172135785
        Te0 [keV]: 18.430347432845625
   ne0 [10²⁰ m⁻³]: 0.9006885581807734














Calls: 71    Time: 0:00:01
            error: 2.916953967321842
     Pfusion [MW]: 280.15624130509826
        Ti0 [keV]: 17.658529548888502
        Te0 [keV]: 18.418603690793223
   ne0 [10²⁰ m⁻³]: 0.9053328744607547














Calls: 78    Time: 0:00:01
            error: 3.2858406217992364
     Pfusion [MW]: 280.52894002194705
        Ti0 [keV]: 17.651579653650987
        Te0 [keV]: 18.42544138435753
   ne0 [10²⁰ m⁻³]: 0.904837949243703














Calls: 85    Time: 0:00:01
            error: 3.772723487649146
     Pfusion [MW]: 279.33021726420753
        Ti0 [keV]: 17.651558127860042
        Te0 [keV]: 18.41715222145824
   ne0 [10²⁰ m⁻³]: 0.9036050138993862














Calls: 91    Time: 0:00:01
            error: 2.8197210852929873
     Pfusion [MW]: 280.3904667872804
        Ti0 [keV]: 17.65370043968055
        Te0 [keV]: 18.42790299676739
   ne0 [10²⁰ m⁻³]: 0.9049994621607724














Calls: 99    Time: 0:00:01
            error: 2.857916418951224
     Pfusion [MW]: 282.62881335599087
        Ti0 [keV]: 17.656402558647535
        Te0 [keV]: 18.423600376292935
   ne0 [10²⁰ m⁻³]: 0.9092724419603491














Calls: 107    Time: 0:00:01
            error: 2.9821823304506236
     Pfusion [MW]: 279.6660199944682
        Ti0 [keV]: 17.653671329178614
        Te0 [keV]: 18.42283968791252
   ne0 [10²⁰ m⁻³]: 0.9041022908223186














Calls: 115    Time: 0:00:01
            error: 3.5305800833678833
     Pfusion [MW]: 278.59266614257035
        Ti0 [keV]: 17.651976123332837
        Te0 [keV]: 18.42051963901253
   ne0 [10²⁰ m⁻³]: 0.9018090184584302














Calls: 122    Time: 0:00:01
            error: 3.8922412795571106
     Pfusion [MW]: 280.5284450131257
        Ti0 [keV]: 17.65081777251326
        Te0 [keV]: 18.42584625286174
   ne0 [10²⁰ m⁻³]: 0.9049043046895201














Calls: 128    Time: 0:00:02
            error: 3.775264446462445
     Pfusion [MW]: 279.87224547590637
        Ti0 [keV]: 17.649263226580512
        Te0 [keV]: 18.416069023115604
   ne0 [10²⁰ m⁻³]: 0.9051425301127992














Calls: 133    Time: 0:00:02
            error: 3.214845684867814
     Pfusion [MW]: 280.2877819338841
        Ti0 [keV]: 17.652382615020453
        Te0 [keV]: 18.427140326830028
   ne0 [10²⁰ m⁻³]: 0.9045461519050062














Calls: 141    Time: 0:00:02
            error: 2.662251994047586
     Pfusion [MW]: 281.2319035874259
        Ti0 [keV]: 17.656010535354312
        Te0 [keV]: 18.41975133574504
   ne0 [10²⁰ m⁻³]: 0.9070051284836352














Calls: 149    Time: 0:00:02
            error: 2.9365993931801837
     Pfusion [MW]: 279.37481837889146
        Ti0 [keV]: 17.65314976369219
        Te0 [keV]: 18.422013102464412
   ne0 [10²⁰ m⁻³]: 0.903103865195874














Calls: 156    Time: 0:00:02
            error: 2.80746299280273
     Pfusion [MW]: 280.64017033109536
        Ti0 [keV]: 17.65526532348119
        Te0 [keV]: 18.42335280525487
   ne0 [10²⁰ m⁻³]: 0.9055697413433573














Calls: 163    Time: 0:00:02
            error: 2.6866418055087338
     Pfusion [MW]: 280.92712686318646
        Ti0 [keV]: 17.656722587642303
        Te0 [keV]: 18.42811644909666
   ne0 [10²⁰ m⁻³]: 0.9062774483617567














Calls: 169    Time: 0:00:02
            error: 2.483547928272602
     Pfusion [MW]: 280.5740773013626
        Ti0 [keV]: 17.655659573097456
        Te0 [keV]: 18.423476400143535
   ne0 [10²⁰ m⁻³]: 0.9056436024843701














Calls: 177    Time: 0:00:02
            error: 2.981216634866588
     Pfusion [MW]: 280.66250033065074
        Ti0 [keV]: 17.654966208695317
        Te0 [keV]: 18.42248298203644
   ne0 [10²⁰ m⁻³]: 0.905474347266658














Calls: 185    Time: 0:00:02
            error: 3.027344606631475
     Pfusion [MW]: 281.60329247880946
        Ti0 [keV]: 17.654478369611606
        Te0 [keV]: 18.421577066993876
   ne0 [10²⁰ m⁻³]: 0.908201427115604














Calls: 193    Time: 0:00:03
            error: 3.3594616288722086
     Pfusion [MW]: 280.6313278819855
        Ti0 [keV]: 17.652816369761073
        Te0 [keV]: 18.422314031852004
   ne0 [10²⁰ m⁻³]: 0.9051604659207524














Calls: 200    Time: 0:00:03
            error: 3.189580669346056
     Pfusion [MW]: 282.44567938042934
        Ti0 [keV]: 17.655279436959407
        Te0 [keV]: 18.42564032093045
   ne0 [10²⁰ m⁻³]: 0.9088891340472204














Calls: 207    Time: 0:00:03
            error: 2.8615379705848945
     Pfusion [MW]: 282.4981870805935
        Ti0 [keV]: 17.65506032149969
        Te0 [keV]: 18.42436091186034
   ne0 [10²⁰ m⁻³]: 0.909015699006906














Calls: 213    Time: 0:00:03
            error: 2.5245366668255262
     Pfusion [MW]: 281.4891528515275
        Ti0 [keV]: 17.65674396922646
        Te0 [keV]: 18.42535648211
   ne0 [10²⁰ m⁻³]: 0.9072907961933444














Calls: 221    Time: 0:00:03
            error: 2.9425475750861967
     Pfusion [MW]: 282.1186248139663
        Ti0 [keV]: 17.65524104937491
        Te0 [keV]: 18.425132656531268
   ne0 [10²⁰ m⁻³]: 0.9077251546438807














Calls: 229    Time: 0:00:03
            error: 4.000859012152771
     Pfusion [MW]: 280.11020062290646
        Ti0 [keV]: 17.64707281215116
        Te0 [keV]: 18.415103950459798
   ne0 [10²⁰ m⁻³]: 0.904471797915232














Calls: 236    Time: 0:00:03
            error: 3.2109252718901318
     Pfusion [MW]: 277.5324034685439
        Ti0 [keV]: 17.650652376262954
        Te0 [keV]: 18.418782358717788
   ne0 [10²⁰ m⁻³]: 0.899982917414641














Calls: 243    Time: 0:00:03
            error: 2.991189331445395
     Pfusion [MW]: 279.74460619296417
        Ti0 [keV]: 17.65091814001814
        Te0 [keV]: 18.41833860783481
   ne0 [10²⁰ m⁻³]: 0.9043644239911532














Calls: 249    Time: 0:00:03
            error: 2.6743913141609634
     Pfusion [MW]: 280.253458000043
        Ti0 [keV]: 17.65437817769255
        Te0 [keV]: 18.423107072536197
   ne0 [10²⁰ m⁻³]: 0.9047858285135669














Calls: 257    Time: 0:00:04
            error: 3.0746972634178933
     Pfusion [MW]: 280.0258094985459
        Ti0 [keV]: 17.652595247884822
        Te0 [keV]: 18.421127850350874
   ne0 [10²⁰ m⁻³]: 0.904500817714892














Calls: 265    Time: 0:00:04
            error: 3.011532252079711
     Pfusion [MW]: 280.0152338245507
        Ti0 [keV]: 17.654332260671044
        Te0 [keV]: 18.423322454223936
   ne0 [10²⁰ m⁻³]: 0.9041346813760628














Calls: 272    Time: 0:00:04
            error: 2.8475907101967413
     Pfusion [MW]: 279.66908482068027
        Ti0 [keV]: 17.652712118038142
        Te0 [keV]: 18.42218410369883
   ne0 [10²⁰ m⁻³]: 0.9030219435224146














Calls: 279    Time: 0:00:04
            error: 2.853107488731472
     Pfusion [MW]: 281.23491023613354
        Ti0 [keV]: 17.656169428646148
        Te0 [keV]: 18.425141762285133
   ne0 [10²⁰ m⁻³]: 0.9066865618440109














Calls: 286    Time: 0:00:04
            error: 2.7406854653896247
     Pfusion [MW]: 280.5157953613695
        Ti0 [keV]: 17.65597560910355
        Te0 [keV]: 18.423617461822065
   ne0 [10²⁰ m⁻³]: 0.9055314255841732














Calls: 294    Time: 0:00:04
            error: 2.98987391206105
     Pfusion [MW]: 278.7989437599628
        Ti0 [keV]: 17.653709752973178
        Te0 [keV]: 18.420573649131352
   ne0 [10²⁰ m⁻³]: 0.9023270706084267














Calls: 302    Time: 0:00:04
            error: 3.038110456804527
     Pfusion [MW]: 279.3204490813429
        Ti0 [keV]: 17.651705073742434
        Te0 [keV]: 18.4194928353094
   ne0 [10²⁰ m⁻³]: 0.9030841004071377














Calls: 309    Time: 0:00:04
            error: 2.515567810106576
     Pfusion [MW]: 281.37099991224335
        Ti0 [keV]: 17.656001250000262
        Te0 [keV]: 18.42468187532455
   ne0 [10²⁰ m⁻³]: 0.9069586507845699














Calls: 316    Time: 0:00:04
            error: 2.7317210482090846
     Pfusion [MW]: 282.30106988463706
        Ti0 [keV]: 17.651769796178503
        Te0 [keV]: 18.42299469262529
   ne0 [10²⁰ m⁻³]: 0.9086027869754641














Calls: 323    Time: 0:00:05
            error: 3.3624340669333925
     Pfusion [MW]: 280.63644770111733
        Ti0 [keV]: 17.651951414236606
        Te0 [keV]: 18.421089017476703
   ne0 [10²⁰ m⁻³]: 0.9047831983892665














Calls: 329    Time: 0:00:05
            error: 3.2411824404058223
     Pfusion [MW]: 281.58616654092316
        Ti0 [keV]: 17.652658766815886
        Te0 [keV]: 18.421449065723746
   ne0 [10²⁰ m⁻³]: 0.906269539644136














Calls: 337    Time: 0:00:05
            error: 3.1425919536537754
     Pfusion [MW]: 281.36551982153406
        Ti0 [keV]: 17.653998767679045
        Te0 [keV]: 18.422398569724358
   ne0 [10²⁰ m⁻³]: 0.9077398731326848














Calls: 345    Time: 0:00:05
            error: 3.8769649039104044
     Pfusion [MW]: 279.5873492877517
        Ti0 [keV]: 17.646595541141075
        Te0 [keV]: 18.415637301871772
   ne0 [10²⁰ m⁻³]: 0.9026735445677151














Calls: 352    Time: 0:00:05
            error: 3.8924157117063447
     Pfusion [MW]: 277.31605443162096
        Ti0 [keV]: 17.650514750847027
        Te0 [keV]: 18.415836814561366
   ne0 [10²⁰ m⁻³]: 0.8998836085430623














Calls: 359    Time: 0:00:05
            error: 3.1529085611949115
     Pfusion [MW]: 280.4384999259946
        Ti0 [keV]: 17.65290881872323
        Te0 [keV]: 18.419716586118003
   ne0 [10²⁰ m⁻³]: 0.9049114382423602














Calls: 365    Time: 0:00:05
            error: 2.841245243153519
     Pfusion [MW]: 280.4378821177695
        Ti0 [keV]: 17.653264098558132
        Te0 [keV]: 18.42153245607906
   ne0 [10²⁰ m⁻³]: 0.9047915888397804














Calls: 373    Time: 0:00:05
            error: 3.9900580245626522
     Pfusion [MW]: 278.71415977621575
        Ti0 [keV]: 17.64873151421109
        Te0 [keV]: 18.417143469371815
   ne0 [10²⁰ m⁻³]: 0.9013353371903389














Calls: 381    Time: 0:00:05
            error: 3.3053190817672577
     Pfusion [MW]: 281.7053183283364
        Ti0 [keV]: 17.653329604201645
        Te0 [keV]: 18.42213222745771
   ne0 [10²⁰ m⁻³]: 0.9078101700675173














Calls: 388    Time: 0:00:06
            error: 2.7472369836382193
     Pfusion [MW]: 280.7734664599434
        Ti0 [keV]: 17.65390503088665
        Te0 [keV]: 18.4222860720402
   ne0 [10²⁰ m⁻³]: 0.9058412868105897














Calls: 395    Time: 0:00:06
            error: 2.365607899546172
     Pfusion [MW]: 278.76549553921734
        Ti0 [keV]: 17.721599446616597
        Te0 [keV]: 18.43959047625747
   ne0 [10²⁰ m⁻³]: 0.9077768835215847














Calls: 402    Time: 0:00:06
            error: 2.050567499603692
     Pfusion [MW]: 262.86706039788083
        Ti0 [keV]: 18.19452614145905
        Te0 [keV]: 18.54116141371257
   ne0 [10²⁰ m⁻³]: 0.9087507177802213














Calls: 410    Time: 0:00:06
            error: 1.1640340672533411
     Pfusion [MW]: 262.8658267814693
        Ti0 [keV]: 18.26484723996774
        Te0 [keV]: 18.587948702571982
   ne0 [10²⁰ m⁻³]: 0.910064335663132














Calls: 417    Time: 0:00:06
            error: 0.817750825938703
     Pfusion [MW]: 268.0508909623478
        Ti0 [keV]: 18.130129468343124
        Te0 [keV]: 18.593836136793534
   ne0 [10²⁰ m⁻³]: 0.9103218030753083














Calls: 424    Time: 0:00:06
            error: 0.6461727848204731
     Pfusion [MW]: 272.51655205534286
        Ti0 [keV]: 18.057284819386776
        Te0 [keV]: 18.637531059819594
   ne0 [10²⁰ m⁻³]: 0.9104763153885189














Calls: 431    Time: 0:00:06
            error: 0.7582933003169371
     Pfusion [MW]: 273.95789930773003
        Ti0 [keV]: 18.01438628440348
        Te0 [keV]: 18.64594542644547
   ne0 [10²⁰ m⁻³]: 0.9091505951950465














Calls: 438    Time: 0:00:06
            error: 0.6008503762889645
     Pfusion [MW]: 272.04436432196815
        Ti0 [keV]: 18.0580263561751
        Te0 [keV]: 18.618960588464116
   ne0 [10²⁰ m⁻³]: 0.9115817730789253














Calls: 445    Time: 0:00:07
            error: 0.4523801846000749
     Pfusion [MW]: 272.5375203713853
        Ti0 [keV]: 18.066796674243044
        Te0 [keV]: 18.629216646501266
   ne0 [10²⁰ m⁻³]: 0.9125196085188071














Calls: 452    Time: 0:00:07
            error: 0.4916544777992327
     Pfusion [MW]: 271.9441125237422
        Ti0 [keV]: 18.083963304615725
        Te0 [keV]: 18.6227325465373
   ne0 [10²⁰ m⁻³]: 0.9132835484420718














Calls: 459    Time: 0:00:07
            error: 0.4253348757473957
     Pfusion [MW]: 272.993629988217
        Ti0 [keV]: 18.067168259908335
        Te0 [keV]: 18.639035655005017
   ne0 [10²⁰ m⁻³]: 0.9124648900769639














Calls: 466    Time: 0:00:07
            error: 0.379173121646686
     Pfusion [MW]: 272.5171629026848
        Ti0 [keV]: 18.073190135553645
        Te0 [keV]: 18.629454043541017
   ne0 [10²⁰ m⁻³]: 0.9131466651468592














Calls: 472    Time: 0:00:07
            error: 0.3599490186435873
     Pfusion [MW]: 273.0547145903361
        Ti0 [keV]: 18.07388034898814
        Te0 [keV]: 18.639596786688
   ne0 [10²⁰ m⁻³]: 0.9133257965466652














Calls: 478    Time: 0:00:07
            error: 0.4262558792409143
     Pfusion [MW]: 272.9219421189471
        Ti0 [keV]: 18.06909550358475
        Te0 [keV]: 18.635452938655977
   ne0 [10²⁰ m⁻³]: 0.9129559931586771














Calls: 485    Time: 0:00:07
            error: 0.43365500710863086
     Pfusion [MW]: 272.70619363785875
        Ti0 [keV]: 18.07418341502591
        Te0 [keV]: 18.626121903565164
   ne0 [10²⁰ m⁻³]: 0.9139605027468234














Calls: 493    Time: 0:00:07
            error: 0.39808143786500066
     Pfusion [MW]: 272.982960728194
        Ti0 [keV]: 18.065270310537155
        Te0 [keV]: 18.63835001616594
   ne0 [10²⁰ m⁻³]: 0.9124360921244239














Calls: 500    Time: 0:00:07
            error: 0.31092010921676205
     Pfusion [MW]: 272.90717580855426
        Ti0 [keV]: 18.081932218448276
        Te0 [keV]: 18.640628165868385
   ne0 [10²⁰ m⁻³]: 0.9140939985184414




actors:    Pedestal
actors:     EPED
actors:    FluxCalculator
actors:     TGLF
actors:     Neoclassical











Calls: 502    Time: 0:00:07
            error: 1.960892703399348
     Pfusion [MW]: 279.7869689988262
        Ti0 [keV]: 17.630675455301134
        Te0 [keV]: 18.449051151814462
   ne0 [10²⁰ m⁻³]: 0.8974766961428751
actors:  Current
actors:   QED
actors:  Equilibrium
actors:   TEQUILA
actors:  --------------- 4/5 @ 205.53%
actors:  HCD
actors:   SimpleEC
actors:   SimpleIC
actors:   NeutralFueling
actors:  Current
actors:   QED
actors:  Pedestal
actors:   EPED
actors:  CoreTransport
actors:   FluxMatcher

Calls: 9    Time: 0:00:00
            error: 0.9500957223667833
     Pfusion [MW]: 268.1731011829451
        Ti0 [keV]: 17.39536888137988
        Te0 [keV]: 18.02933853573383
   ne0 [10²⁰ m⁻³]: 0.9056208959625629














Calls: 18    Time: 0:00:00
            error: 0.44950083784584993
     Pfusion [MW]: 260.98756638182465
        Ti0 [keV]: 17.211213500230762
        Te0 [keV]: 17.68645803844546
   ne0 [10²⁰ m⁻³]: 0.9094530296788695














Calls: 26    Time: 0:00:00
            error: 0.3143033060301195
     Pfusion [MW]: 255.78241621199578
        Ti0 [keV]: 17.12624724499888
        Te0 [keV]: 17.51088247362389
   ne0 [10²⁰ m⁻³]: 0.9064521158873012














Calls: 33    Time: 0:00:00
            error: 0.21085112298714984
     Pfusion [MW]: 257.50099543461755
        Ti0 [keV]: 17.150568911101388
        Te0 [keV]: 17.539337479317997
   ne0 [10²⁰ m⁻³]: 0.9088773911151321














Calls: 42    Time: 0:00:00
            error: 0.15763521353420248
     Pfusion [MW]: 257.7072428888061
        Ti0 [keV]: 17.153946668812573
        Te0 [keV]: 17.526518633813748
   ne0 [10²⁰ m⁻³]: 0.9099240920147659














Calls: 51    Time: 0:00:00
            error: 0.1442595772573007
     Pfusion [MW]: 260.0319121106592
        Ti0 [keV]: 17.243214931394
        Te0 [keV]: 17.596085161666178
   ne0 [10²⁰ m⁻³]: 0.9110351531648937














Calls: 59    Time: 0:00:00
            error: 0.1450673820936236
     Pfusion [MW]: 259.7375455015657
        Ti0 [keV]: 17.23199963339825
        Te0 [keV]: 17.58790923287813
   ne0 [10²⁰ m⁻³]: 0.9108839576863449














Calls: 67    Time: 0:00:00
            error: 0.1430720366722004
     Pfusion [MW]: 259.8494629052934
        Ti0 [keV]: 17.2360988585548
        Te0 [keV]: 17.590890704736566
   ne0 [10²⁰ m⁻³]: 0.910956311085062














Calls: 73    Time: 0:00:01
            error: 0.14151597732270188
     Pfusion [MW]: 260.02295085852455
        Ti0 [keV]: 17.24443474173811
        Te0 [keV]: 17.595418087636585
   ne0 [10²⁰ m⁻³]: 0.9110546716660622














Calls: 81    Time: 0:00:01
            error: 0.1406010805019913
     Pfusion [MW]: 259.9754801490917
        Ti0 [keV]: 17.2423157565979
        Te0 [keV]: 17.59273313803819
   ne0 [10²⁰ m⁻³]: 0.9111278132482765














Calls: 90    Time: 0:00:01
            error: 0.14056959441176275
     Pfusion [MW]: 259.8289217244676
        Ti0 [keV]: 17.241245132995125
        Te0 [keV]: 17.5891706047478
   ne0 [10²⁰ m⁻³]: 0.910983863839643














Calls: 98    Time: 0:00:01
            error: 0.13513279509349743
     Pfusion [MW]: 258.9173950140445
        Ti0 [keV]: 17.3484936040248
        Te0 [keV]: 17.580372974373066
   ne0 [10²⁰ m⁻³]: 0.9095648989476071














Calls: 106    Time: 0:00:01
            error: 0.1330582771804062
     Pfusion [MW]: 258.56431415962396
        Ti0 [keV]: 17.405270086823236
        Te0 [keV]: 17.585060458201834
   ne0 [10²⁰ m⁻³]: 0.9088763289751358














Calls: 113    Time: 0:00:01
            error: 0.12973986677012198
     Pfusion [MW]: 258.74581845663135
        Ti0 [keV]: 17.484223498798773
        Te0 [keV]: 17.645473460506828
   ne0 [10²⁰ m⁻³]: 0.9085796692404858














Calls: 122    Time: 0:00:01
            error: 0.11094635290272271
     Pfusion [MW]: 263.0051211062861
        Ti0 [keV]: 17.906814822596523
        Te0 [keV]: 18.085632802511757
   ne0 [10²⁰ m⁻³]: 0.9106993485054449














Calls: 131    Time: 0:00:01
            error: 0.08852113067311002
     Pfusion [MW]: 265.90017871060536
        Ti0 [keV]: 18.31306616046482
        Te0 [keV]: 18.443454041596397
   ne0 [10²⁰ m⁻³]: 0.9095655739068403














Calls: 138    Time: 0:00:01
            error: 0.07844549343904036
     Pfusion [MW]: 267.40526383846577
        Ti0 [keV]: 18.456195750815507
        Te0 [keV]: 18.59935890014721
   ne0 [10²⁰ m⁻³]: 0.9088358831795451














Calls: 145    Time: 0:00:01
            error: 0.0747148636219262
     Pfusion [MW]: 267.9352376638203
        Ti0 [keV]: 18.499904484203423
        Te0 [keV]: 18.655730121891093
   ne0 [10²⁰ m⁻³]: 0.9083997705975643














Calls: 152    Time: 0:00:02
            error: 0.07147629099683245
     Pfusion [MW]: 268.38899921199504
        Ti0 [keV]: 18.536012069002435
        Te0 [keV]: 18.698754604534226
   ne0 [10²⁰ m⁻³]: 0.9084793738167591














Calls: 160    Time: 0:00:02
            error: 0.07003188738473329
     Pfusion [MW]: 268.69966080865674
        Ti0 [keV]: 18.54527187704317
        Te0 [keV]: 18.721686433156023
   ne0 [10²⁰ m⁻³]: 0.9088034812289899














Calls: 169    Time: 0:00:02
            error: 0.06772920579756905
     Pfusion [MW]: 269.22516274985816
        Ti0 [keV]: 18.576339621223056
        Te0 [keV]: 18.775002682138766
   ne0 [10²⁰ m⁻³]: 0.9088402231577805














Calls: 177    Time: 0:00:02
            error: 0.06076551456579788
     Pfusion [MW]: 269.88269732948874
        Ti0 [keV]: 18.548164099734727
        Te0 [keV]: 18.83598165349997
   ne0 [10²⁰ m⁻³]: 0.9087538642894328














Calls: 185    Time: 0:00:02
            error: 0.04238756114056568
     Pfusion [MW]: 270.68836547531834
        Ti0 [keV]: 18.35903964056234
        Te0 [keV]: 18.845909517395306
   ne0 [10²⁰ m⁻³]: 0.9098475100612693














Calls: 191    Time: 0:00:02
            error: 0.0356835691400545
     Pfusion [MW]: 270.8209780000323
        Ti0 [keV]: 18.22656999991351
        Te0 [keV]: 18.81640245861393
   ne0 [10²⁰ m⁻³]: 0.910407331096615














Calls: 199    Time: 0:00:02
            error: 0.034785905614614615
     Pfusion [MW]: 270.7405753307233
        Ti0 [keV]: 18.19452831895242
        Te0 [keV]: 18.79852184377357
   ne0 [10²⁰ m⁻³]: 0.91055820040524














Calls: 207    Time: 0:00:02
            error: 0.02738794577546587
     Pfusion [MW]: 270.7351803141492
        Ti0 [keV]: 18.08968497638827
        Te0 [keV]: 18.731796001306506
   ne0 [10²⁰ m⁻³]: 0.9104715644039424














Calls: 215    Time: 0:00:03
            error: 0.024218619995743144
     Pfusion [MW]: 270.7817317900384
        Ti0 [keV]: 18.03240437014308
        Te0 [keV]: 18.700053438908604
   ne0 [10²⁰ m⁻³]: 0.9103612721701505














Calls: 222    Time: 0:00:03
            error: 0.02365126590686313
     Pfusion [MW]: 270.78239386576905
        Ti0 [keV]: 18.020483455951723
        Te0 [keV]: 18.690496442367923
   ne0 [10²⁰ m⁻³]: 0.9103095639315439














Calls: 229    Time: 0:00:03
            error: 0.022336713080653735
     Pfusion [MW]: 270.72267274126494
        Ti0 [keV]: 18.01542082466471
        Te0 [keV]: 18.68328514766873
   ne0 [10²⁰ m⁻³]: 0.9101650285930086














Calls: 238    Time: 0:00:03
            error: 0.020627947012913324
     Pfusion [MW]: 270.40567385598166
        Ti0 [keV]: 18.002787854499633
        Te0 [keV]: 18.64642108473707
   ne0 [10²⁰ m⁻³]: 0.9095535054086707




actors:    Pedestal
actors:     EPED
actors:    FluxCalculator
actors:     TGLF
actors:     Neoclassical











Calls: 238    Time: 0:00:03
            error: 0.020627947012913324
     Pfusion [MW]: 270.40567385598166
        Ti0 [keV]: 18.002787854499633
        Te0 [keV]: 18.64642108473707
   ne0 [10²⁰ m⁻³]: 0.9095535054086707
actors:  Current
actors:   QED
actors:  Equilibrium
actors:   TEQUILA
actors:  --------------- 5/5 @ 130.73%
┌ Warning: Max number of iterations (5) has been reached with convergence error of (1)[0.337, 0.321, 0.174, 0.103, 0.065](5) compared to threshold of 0.05
└ @ FUSE ~/work/FUSE.jl/FUSE.jl/src/actors/compound/stationary_plasma_actor.jl:208

we can compare equilibrium before and after the self-consistency loop

plot!(peq, dd.equilibrium; label="after")
Example block output

we can compare core_profiles before and after the self-consistency loop

plot!(pcp, dd.core_profiles; label="after")
Example block output

here are the sources

plot(dd.core_sources)
Example block output

and the flux-matched transport

plot(dd.core_transport)
Example block output

HFS sizing actor changes the thickness of the OH and TF layers on the high field side to satisfy current and stresses constraints

plot(dd.build)
FUSE.ActorHFSsizing(dd, act);
plot!(dd.build; cx=false)
Example block output

The stresses on the center stack are stored in the solid_mechanics IDS

plot(dd.solid_mechanics.center_stack.stress)
Example block output

LFS sizing actors change location of the outer TF leg to meet ripple requirements

plot(dd.build)
FUSE.ActorLFSsizing(dd, act);
plot!(dd.build; cx=false)
Example block output

A custom show() method is defined to print the summary of dd.build.layer

dd.build.layer
23×10 DataFrame
 Row │ group   details                            type      ΔR          R_start   R_end     material      area        volume     shape
     │ String  String                             String    Float64     Float64   Float64   String        Float64     Float64    String
─────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1 │ in                                                   1.30751      0.0       1.30751  steel          20.0726      98.9942  rectangle
   2 │ in                                         oh        0.310265     1.30751   1.61777  nb3sn           6.9632      80.5952  rectangle
   3 │ hfs                                        tf        1.68017      1.61777   3.29794  nb3sn_kdemo    42.9246     889.465   convex hull
   4 │ hfs     gap tf vacuum vessel                         0.0          3.29794   3.29794  vacuum          7.46559    490.871   double ellipse
   5 │ hfs     vacuum  outer                      vessel    0.0982993    3.29794   3.39624  steel           3.06115    124.717   negative offset
   6 │ hfs     gap water                                    0.147449     3.39624   3.54369  water           4.47786    182.552   negative offset
   7 │ hfs     vacuum  inner                      vessel    0.0982993    3.54369   3.64199  steel           2.90933    118.686   negative offset
   8 │ hfs     gap high temp shield vacuum vess…            0.00982993   3.64199   3.65182  vacuum          0.287593    11.7359  negative offset
   9 │ hfs     high temp                          shield    0.196599     3.65182   3.84842  steel           5.62432    229.652   negative offset
  10 │ hfs                                        blanket   0.373538     3.84842   4.22196  lithium_lead   20.8557     951.46    negative offset
  11 │ hfs     first                              wall      0.0196599    4.22196   4.24162  tungsten        1.02635     34.1644  offset
  12 │ lhfs                                       plasma    4.51651      4.24162   8.75812  plasma         32.1335    1252.4
  13 │ lfs     first                              wall      0.0196599    8.75812   8.77778  tungsten        1.02635     34.1644  offset
  14 │ lfs                                        blanket   1.17959      8.77778   9.95738  lithium_lead   20.8557     951.46    negative offset
  15 │ lfs     high temp                          shield    0.196599     9.95738  10.154    steel           5.62432    229.652   negative offset
  16 │ lfs     gap high temp shield vacuum vess…            0.0442026   10.154    10.1982   vacuum          0.287593    11.7359  negative offset
  17 │ lfs     vacuum  inner                      vessel    0.0982993   10.1982   10.2965   steel           2.90933    118.686   negative offset
  18 │ lfs     gap water                                    0.147449    10.2965   10.4439   water           4.47786    182.552   negative offset
  19 │ lfs     vacuum  outer                      vessel    0.0982993   10.4439   10.5422   steel           3.06115    124.717   negative offset
  20 │ lfs     gap tf vacuum vessel                         0.775582    10.5422   11.3178   vacuum          7.46559    490.871   double ellipse
  21 │ lfs                                        tf        1.68017     11.3178   12.998    nb3sn_kdemo    42.9246     889.465   convex hull
  22 │ out                                                  1.96599      0.0      14.964    vacuum        164.187     8377.39
  23 │ out                                        cryostat  0.0982993    0.0      15.0623   steel           4.86738    309.732   silo

ActorHFSsizing and ActorLFSsizing only change the layer's thicknesses, so we then need to trigger a build of the 2D cross-sections after them:

FUSE.ActorCXbuild(dd, act);
plot(dd.build)
Example block output

Generate passive structures information (for now the vacuum vessel)

FUSE.ActorPassiveStructures(dd, act)
plot(dd.pf_passive)
Example block output

We can now give the PF coils their final position given the new build

actor = FUSE.ActorPFdesign(dd, act);
plot(actor) # some actors define their own plot
Example block output

With information about both pfactive and pfpassive we can now evaluate vertical stability

FUSE.ActorVerticalStability(dd, act)
IMAS.freeze(dd.mhd_linear)
mhd_linear [DETACHED]
├─ time[0] [s]
└─ time_slice
   └─ 1
      ├─ time ➡ 0 [s]
      └─ toroidal_mode
         ├─ 1
         │  ├─ n_tor0
         │  ├─ perturbation_type
         │  │  ├─ description"Vertical stability margin > 0.15 for stability"
         │  │  └─ name"m_s"
         │  └─ stability_metric ➡ 0.178803
         └─ 2
            ├─ n_tor0
            ├─ perturbation_type
            │  ├─ description"Normalized vertical growth rate < 10 for stability"
            │  └─ name"γτ"
            └─ stability_metric ➡ 6.71595

The ActorNeutronics calculates the heat flux on the first wall

FUSE.ActorNeutronics(dd, act);
p = plot(; layout=2, size=(900, 350))
plot!(p, dd.neutronics.time_slice[].wall_loading, subplot=1)
plot!(p, FUSE.define_neutrons(dd, 100000)[1], dd.equilibrium.time_slice[]; subplot=1, colorbar_entry=false)
plot!(p, dd.neutronics.time_slice[].wall_loading; cx=false, subplot=2, ylabel="")
Example block output

The ActorBlanket will change the thickess of the first wall, breeder, shield, and Li6 enrichment to achieve target TBR

FUSE.ActorBlanket(dd, act);
print_tree(IMAS.freeze(dd.blanket); maxdepth=5)
actors: Blanket
blanket [DETACHED]
├─ module
│  └─ 1
│     ├─ layer
│     │  ├─ 1
│     │  │  ├─ material ➡ "tungsten"
│     │  │  ├─ midplane_thickness ➡ 0.0199578 [m]
│     │  │  └─ name ➡ "lfs first wall"
│     │  ├─ 2
│     │  │  ├─ material ➡ "lithium-lead: Li6/7=90.000%"
│     │  │  ├─ midplane_thickness ➡ 1.27997 [m]
│     │  │  └─ name ➡ "lfs blanket"
│     │  └─ 3
│     │     ├─ material ➡ "steel"
│     │     ├─ midplane_thickness ➡ 0.0959211 [m]
│     │     └─ name ➡ "lfs high temp shield"
│     ├─ name ➡ "blanket"
│     └─ time_slice
│        └─ 1
│           ├─ peak_escape_flux ➡ 199290 [W/m^2]
│           ├─ peak_wall_flux ➡ 902583 [W/m^2]
│           ├─ power_incident_neutrons ➡ 9.66764e+06 [W]
│           ├─ power_incident_radiated ➡ 0 [W]
│           ├─ power_thermal_extracted ➡ 1.16012e+07 [W]
│           ├─ power_thermal_neutrons ➡ 1.16012e+07 [W]
│           ├─ power_thermal_radiated ➡ 0 [W]
│           ├─ time ➡ 0 [s]
│           └─ tritium_breeding_ratio ➡ 1.63959
├─ time ➡ [0] [s]
└─ tritium_breeding_ratio ➡ [0.0732742]

The ActorDivertors actor calculates the divertors heat flux

FUSE.ActorDivertors(dd, act);
print_tree(IMAS.freeze(dd.divertors); maxdepth=4)
actors: Divertors
divertors [DETACHED]
├─ divertor
│  └─ 1
│     ├─ power_black_body
│     │  ├─ data ➡ [0] [W]
│     │  └─ time ➡ [0] [s]
│     ├─ power_conducted
│     │  ├─ data ➡ [1.19644e+08] [W]
│     │  └─ time ➡ [0] [s]
│     ├─ power_convected
│     │  ├─ data ➡ [0] [W]
│     │  └─ time ➡ [0] [s]
│     ├─ power_currents
│     │  ├─ data ➡ [0] [W]
│     │  └─ time ➡ [0] [s]
│     ├─ power_incident
│     │  ├─ data ➡ [3.67253e+07] [W]
│     │  └─ time ➡ [0] [s]
│     ├─ power_neutrals
│     │  ├─ data ➡ [0] [W]
│     │  └─ time ➡ [0] [s]
│     ├─ power_radiated
│     │  ├─ data ➡ [0] [W]
│     │  └─ time ➡ [0] [s]
│     ├─ power_recombination_neutrals
│     │  ├─ data ➡ [0] [W]
│     │  └─ time ➡ [0] [s]
│     ├─ power_recombination_plasma
│     │  ├─ data ➡ [0] [W]
│     │  └─ time ➡ [0] [s]
│     ├─ power_thermal_extracted
│     │  ├─ data ➡ [3.67253e+07] [W]
│     │  └─ time ➡ [0] [s]
│     └─ target
│        ├─ 1
│        │  ⋮
│        │
│        └─ 2
│           ⋮
│
└─ time ➡ [0] [s]

The ActorBalanceOfPlant calculates the optimal cooling flow rates for the heat sources (breeder, divertor, and wall) and get an efficiency for the electricity conversion cycle

FUSE.ActorBalanceOfPlant(dd, act);
IMAS.freeze(dd.balance_of_plant)
balance_of_plant [DETACHED]
├─ Q_plant[0.130476]
├─ power_electric_net[-1.26081e+08] [W]
├─ power_electric_plant_operation
│  ├─ system
│  │  ├─ 1
│  │  │  ├─ index1
│  │  │  ├─ name"HCD"
│  │  │  ├─ power[1e+08] [W]
│  │  │  └─ subsystem
│  │  │     ├─ 1
│  │  │     │  ├─ index1
│  │  │     │  ├─ name"nbi"
│  │  │     │  └─ power[0] [W]
│  │  │     ├─ 2
│  │  │     │  ├─ index2
│  │  │     │  ├─ name"ec_launchers"
│  │  │     │  └─ power[5e+07] [W]
│  │  │     ├─ 3
│  │  │     │  ├─ index3
│  │  │     │  ├─ name"ic_antennas"
│  │  │     │  └─ power[5e+07] [W]
│  │  │     └─ 4
│  │  │        ├─ index4
│  │  │        ├─ name"lh_antennas"
│  │  │        └─ power[0] [W]
│  │  ├─ 2
│  │  │  ├─ index3
│  │  │  ├─ name"cryostat"
│  │  │  └─ power[3e+07] [W]
│  │  ├─ 3
│  │  │  ├─ index4
│  │  │  ├─ name"tritium_handling"
│  │  │  └─ power[1.5e+07] [W]
│  │  └─ 4
│  │     ├─ index6
│  │     ├─ name"pf_active"
│  │     └─ power[0] [W]
│  └─ total_power[1.45e+08] [W]
├─ power_plant
│  ├─ heat_load
│  │  ├─ breeder[1.16012e+07] [W]
│  │  ├─ divertor[3.67253e+07] [W]
│  │  └─ wall[3.49885e+07] [W]
│  ├─ power_cycle_type"rankine"
│  ├─ power_electric_generated[1.8919e+07] [W]
│  └─ total_heat_supplied[8.3315e+07] [W]
├─ thermal_efficiency_plant[0.227078]
└─ time[0] [s]

ActorCosting will break down the capital and operational costs

FUSE.ActorCosting(dd, act)
plot(dd.costing)
Example block output

Let's checkpoint our results

@checkin :manual dd ini act

Whole facility design

Here we restore the :init checkpoint that we had previously stored. Resetting any changes to dd, ini, and act that we did in the meantime.

@checkout :init dd ini act

Actors can call other actors, creating workflows. For example, the ActorWholeFacility can be used to to get a self-consistent stationary whole facility design.

FUSE.ActorWholeFacility(dd, act);
actors: WholeFacility
actors:  PFdesign
actors:  StationaryPlasma
actors:   --------------- 1/5
actors:   HCD
actors:    SimpleEC
actors:    SimpleIC
actors:    NeutralFueling
actors:   Current
actors:    QED
actors:   Pedestal
actors:    EPED
actors:   CoreTransport
actors:    FluxMatcher
actors:     Pedestal
actors:      EPED
actors:     FluxCalculator
actors:      TGLF
actors:      Neoclassical
actors:   Current
actors:    QED
actors:   Equilibrium
actors:    TEQUILA
actors:   --------------- 1/5 @ 670.13%
actors:   HCD
actors:    SimpleEC
actors:    SimpleIC
actors:    NeutralFueling
actors:   Current
actors:    QED
actors:   Pedestal
actors:    EPED
actors:   CoreTransport
actors:    FluxMatcher
actors:     Pedestal
actors:      EPED
actors:     FluxCalculator
actors:      TGLF
actors:      Neoclassical
actors:   Current
actors:    QED
actors:   Equilibrium
actors:    TEQUILA
actors:   --------------- 2/5 @ 628.46%
actors:   HCD
actors:    SimpleEC
actors:    SimpleIC
actors:    NeutralFueling
actors:   Current
actors:    QED
actors:   Pedestal
actors:    EPED
actors:   CoreTransport
actors:    FluxMatcher
actors:     Pedestal
actors:      EPED
actors:     FluxCalculator
actors:      TGLF
actors:      Neoclassical
actors:   Current
actors:    QED
actors:   Equilibrium
actors:    TEQUILA
actors:   --------------- 3/5 @ 348.16%
actors:   HCD
actors:    SimpleEC
actors:    SimpleIC
actors:    NeutralFueling
actors:   Current
actors:    QED
actors:   Pedestal
actors:    EPED
actors:   CoreTransport
actors:    FluxMatcher
actors:     Pedestal
actors:      EPED
actors:     FluxCalculator
actors:      TGLF
actors:      Neoclassical
actors:   Current
actors:    QED
actors:   Equilibrium
actors:    TEQUILA
actors:   --------------- 4/5 @ 249.76%
actors:   HCD
actors:    SimpleEC
actors:    SimpleIC
actors:    NeutralFueling
actors:   Current
actors:    QED
actors:   Pedestal
actors:    EPED
actors:   CoreTransport
actors:    FluxMatcher
actors:     Pedestal
actors:      EPED
actors:     FluxCalculator
actors:      TGLF
actors:      Neoclassical
actors:   Current
actors:    QED
actors:   Equilibrium
actors:    TEQUILA
actors:   --------------- 5/5 @ 148.59%
┌ Warning: Max number of iterations (5) has been reached with convergence error of (1)[0.335, 0.314, 0.174, 0.125, 0.074](5) compared to threshold of 0.05
└ @ FUSE ~/work/FUSE.jl/FUSE.jl/src/actors/compound/stationary_plasma_actor.jl:208
actors:  HFSsizing
actors:   FluxSwing
actors:   Stresses
actors:  LFSsizing
actors:  CXbuild
actors:  PFdesign
actors:  Equilibrium
actors:   TEQUILA
actors:  CXbuild
actors:  Neutronics
actors:  Blanket
actors:  CXbuild
actors:  PassiveStructures
actors:  Divertors
actors:  PlasmaLimits
actors:   VerticalStability
actors:   TroyonBetaNN
actors:  BalanceOfPlant
actors:   ThermalPlant
actors:   PowerNeeds
actors:  Costing
actors:   CostingARIES

Let's check what we got at a glance with the FUSE.digest(dd) function:

FUSE.digest(dd)
GEOMETRY                                EQUILIBRIUM                             TEMPERATURES
────────────────────────────────────    ────────────────────────────────────    ────────────────────────────────────
R0 → 6.5 [m]                            B0 → 7.8 [T]                            Te0 → 18.6 [keV]
a → 2.01 [m]                            ip → 12.7 [MA]                          Ti0 → 18.1 [keV]
1/ϵ → 3.24                              q95 → 6.12                              <Te> → 8.65 [keV]
κ → 2                                   <Bpol> → 0.802 [T]                      <Ti> → 7.86 [keV]
δ → 0.588                               βpol_MHD → 0.77                         Te0/<Te> → 2.15
ζ → -0.0136                             βtor_MHD → 0.00841                      Ti0/<Ti> → 2.31
Volume → 931 [m³]                       βn_MHD → 1.03
Surface → 759 [m²]

DENSITIES                               PRESSURES                               TRANSPORT
────────────────────────────────────    ────────────────────────────────────    ────────────────────────────────────
ne0 → 9.04e+19 [m⁻³]                    P0 → 0.503 [MPa]                        τe → 2.37 [s]
ne_ped → 6.74e+19 [m⁻³]                 <P> → 0.204 [MPa]                       τe_exp → 1.83 [s]
ne_line → 8.26e+19 [m⁻³]                P0/<P> → 2.46                           H98y2 → 0.862
<ne> → 7.56e+19 [m⁻³]                   βn → 1.04                               H98y2_exp → 0.796
ne0/<ne> → 1.2                          βn_th → 1.04                            Hds03 → 0.642
fGW → 0.821                                                                     Hds03_exp → 0.572
zeff_ped → 2                                                                    τα_thermalization → 0.891 [s]
<zeff> → 2                                                                      τα_slowing_down → 0.989 [s]
impurities → DT Ne20 He4

SOURCES                                 EXHAUST                                 CURRENTS
────────────────────────────────────    ────────────────────────────────────    ────────────────────────────────────
Pec → 50 [MW]                           Psol → 120 [MW]                         ip_bs_aux_ohm → 13 [MA]
rho0_ec → 0.56 [MW]                     PLH → 134 [MW]                          ip_ni → 6.62 [MA]
Pnbi → NaN [MW]                         Bpol_omp → 1.11 [T]                     ip_bs → 3.05 [MA]
Enbi1 → NaN [MeV]                       λq → 0.978 [mm]                         ip_aux → 3.57 [MA]
Pic → 50 [MW]                           qpol → 2.3e+03 [MW/m²]                  ip_ohm → 6.36 [MA]
Plh → NaN [MW]                          qpar → 1.26e+04 [MW/m²]                 ejima → 0.4
Paux_tot → 100 [MW]                     P/R0 → 18.4 [MW/m]                      flattop → 0.7 [Hours]
Pα → 54.4 [MW]                          PB/R0 → 144 [MW T/m]
Pohm → 0.518 [MW]                       PBp/R0 → 14.8 [MW T/m]
Pheat → 155 [MW]                        PBϵ/R0q95 → 7.26 [MW T/m]
Prad_tot → -35 [MW]                     neutrons_peak → 0.361 [MW/m²]

BOP                                     BUILD                                   COSTING
────────────────────────────────────    ────────────────────────────────────    ────────────────────────────────────
Pfusion → 272 [MW]                      PF_material → nb3sn                     capital_cost → 6.74 [$B]
Qfusion → 2.72                          TF_material → nb3sn_kdemo               levelized_CoE → Inf [$/kWh]
thermal_cycle_type → rankine            OH_material → nb3sn                     TF_of_total → 17.4 [%]
thermal_efficiency_plant → 22.7 [%]     TF_max_b → 15.4 [T]                     BOP_of_total → 1.79 [%]
thermal_efficiency_cycle → NaN [%]      OH_max_b → 16 [T]                       blanket_of_total → 20.6 [%]
power_electric_generated → 18.3 [MW]    TF_j_margin → 6.67                      cryostat_of_total → 3.02 [%]
Pelectric_net → -127 [MW]               OH_j_margin → 1.4
Qplant → 0.126                          TF_stress_margin → 3.02
TBR → 0.0779                            OH_stress_margin → 1.2

@ time = 0.0 [s]
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
GKS: could not find font middle.ttf
​
​
​

Like before we can checkpoint results for later use

@checkin :awf dd ini act

Getting into the weeds

Saving and loading data

tutorial_temp_dir = tempdir()
filename = joinpath(tutorial_temp_dir, "$(ini.general.casename).json")
"/tmp/K-DEMO.json"

When saving data to be shared outside of FUSE, one can set freeze=true so that all expressions in the dd are evaluated and saved to file.

IMAS.imas2json(dd, filename; freeze=false, strict=false);

Load from JSON

dd1 = IMAS.json2imas(filename);

Exploring the data dictionary

  • FUSE stores data following the IMAS data schema.
  • The root of the data structure is dd, which stands for "Data Dictionary".
  • More details are available in the documentation.

Display part of the equilibrium data in dd

dd.equilibrium.time_slice[1].boundary
boundary
├─ elongation ➡ 1.999
├─ elongation_lowerFunction
├─ elongation_upperFunction
├─ geometric_axis
│  ├─ r ➡ 6.49987 [m]
│  └─ z ➡ 0.0124918 [m]
├─ minor_radius ➡ 2.00734 [m]
├─ outline
│  ├─ r243-element Vector{Float64} [m]
│  │      min:4.51   avg:6.25   max:8.49
│  └─ z243-element Vector{Float64} [m]min:-4.17   avg:-0.0578   max:3.92
├─ ovality ➡ 0.00572603
├─ psi ➡ -0.77774 [Wb]
├─ squareness ➡ -0.0135544
├─ squareness_lower_innerFunction
├─ squareness_lower_outerFunction
├─ squareness_upper_innerFunction
├─ squareness_upper_outerFunction
├─ strike_point
│  ├─ 1
│  │  ├─ last_closed_flux_surface_gap ➡ 1.18848e-08 [m]
│  │  ├─ r ➡ 4.22388 [m]
│  │  └─ z ➡ -4.50536 [m]
│  └─ 2
│     ├─ last_closed_flux_surface_gap ➡ 1.18848e-08 [m]
│     ├─ r ➡ 5.53904 [m]
│     └─ z ➡ -5.16421 [m]
├─ tilt ➡ -0.00162958
├─ triangularity ➡ 0.587596
├─ triangularity_lowerFunction
├─ triangularity_upperFunction
├─ twist ➡ 0.00165424
└─ x_point
   ├─ 1
   │  ├─ r ➡ 5.09059 [m]
   │  └─ z ➡ -4.14955 [m]
   └─ 2
      ├─ r ➡ 4.86111 [m]
      └─ z ➡ 4.37247 [m]

this can be done up to a certain depth with print_tree

print_tree(dd.equilibrium.time_slice[1].boundary; maxdepth=1)
boundary
├─ elongation ➡ 1.999
├─ elongation_lower ➡ Function
├─ elongation_upper ➡ Function
├─ geometric_axis
│  ⋮
│
├─ minor_radius ➡ 2.00734 [m]
├─ outline
│  ⋮
│
├─ ovality ➡ 0.00572603
├─ psi ➡ -0.77774 [Wb]
├─ squareness ➡ -0.0135544
├─ squareness_lower_inner ➡ Function
├─ squareness_lower_outer ➡ Function
├─ squareness_upper_inner ➡ Function
├─ squareness_upper_outer ➡ Function
├─ strike_point
│  ⋮
│
├─ tilt ➡ -0.00162958
├─ triangularity ➡ 0.587596
├─ triangularity_lower ➡ Function
├─ triangularity_upper ➡ Function
├─ twist ➡ 0.00165424
└─ x_point
   ⋮

Plotting data from dd

FUSE uses Plots.jl recipes for visualizing data from dd.

This allows different plots to be shown when calling plot() on different items in the data structure.

Learn more about Plots.jl here

For example plotting the equilibrium...

plot(dd.equilibrium)
Example block output

...or the core profiles

plot(dd.core_profiles)
Example block output

Whant to know what arguments can be passed? use help_plot() function

help_plot(dd.equilibrium; core_profiles_overlay=true, levels_in=21, levels_out=5, show_secondary_separatrix=true, coordinate=:rho_tor_norm)
Example block output

These plots can be composed by calling plot!() instead of plot()

plot(dd.equilibrium; color=:gray, cx=true)
plot!(dd.build.layer)
plot!(dd.pf_active)
plot!(dd.pf_passive)
plot!(dd.pulse_schedule.position_control; color=:red)
Example block output

Plotting an array...

plot(dd.core_profiles.profiles_1d[1].pressure_thermal)
Example block output

...is different from plotting a field from the IDS (which plots the quantity against its coordinate and with units)

plot(dd.core_profiles.profiles_1d[1], :pressure_thermal)
Example block output

Customizing plot attributes:

plot(dd.core_profiles.profiles_1d[1], :pressure_thermal; label="", linewidth=2, color=:red, labelfontsize=25)
Example block output

Use findall(ids, r"...") to search for certain fields. In Julia, string starting with r are regular expressions.

findall(dd, r"\.psi")
[1] dd.core_profiles.profiles_1d[1].grid.psi_norm [101-element Vector{Float64}] (min:0, avg:0.465, max:1)
[2] dd.core_profiles.profiles_1d[1].grid.psi [Wb] [101-element Vector{Float64}] (min:-69, avg:-37.3, max:-0.89)
[3] dd.equilibrium.time_slice[1].boundary.psi [Wb] [Float64] (all:-0.778)
[4] dd.equilibrium.time_slice[1].boundary_separatrix.psi [Wb] [Float64] (all:-0.778)
[5] dd.equilibrium.time_slice[1].global_quantities.psi_boundary [Wb] [Float64] (all:-0.778)
[6] dd.equilibrium.time_slice[1].global_quantities.psi_axis [Wb] [Float64] (all:-73.9)
[7] dd.equilibrium.time_slice[1].profiles_1d.psi_norm [129-element Vector{Float64}] (min:0, avg:0.5, max:1)
[8] dd.equilibrium.time_slice[1].profiles_1d.psi [Wb] [129-element Vector{Float64}] (min:-73.9, avg:-37.4, max:-0.778)
[9] dd.equilibrium.time_slice[1].profiles_2d[1].psi [Wb] [31×13 Matrix{Float64}] (min:-0.038, avg:0.634, max:6.64)
[10] dd.equilibrium.time_slice[1].profiles_2d[2].psi [Wb] [66×129 Matrix{Float64}] (min:-73.9, avg:17.8, max:182)

findall(ids, r"...") can be combined with plot() to plot multiple fields

plot(findall(dd, r"\.psi"))
Example block output

Working with time series

The IMAS data structure supports time-dependent data, and IMAS.jl provides ways to handle time data efficiently.

Each dd has a global_time attribute, which is used throughout FUSE and IMAS to indicate the time at which things should be operate.

dd.global_time
0.0

For the sake of demonstrating handling of time, let's add a new time_slice to the equilibrium.

NOTE: in addition to the usual resize!(ids, n::Int), time dependent arrays of structures can be resized with:

  • resize!(ids) which will add a time-slice at the current global time (this is what you want to use in most cases)
  • resize!(ids, time0) which will add a time-slice at time0 seconds

resize the time dependent array of structure

resize!(dd.equilibrium.time_slice, 1.0);

let's just populate it with the data from the previous time slice

dd.equilibrium.time_slice[2] = deepcopy(dd.equilibrium.time_slice[1]);
dd.equilibrium.time_slice[2].time = 1.0
1.0

Here we see that equilibrium has mulitiple time_slices

dd.equilibrium.time
2-element Vector{Float64}:
 0.0
 1.0

We can access time-dependent arrays of structures via integer index...

eqt = dd.equilibrium.time_slice[2]
eqt.time
1.0

...or at a given time, by passing the time as a floating point number (in seconds)

eqt = dd.equilibrium.time_slice[1.0]
eqt.time
1.0

NOTE: If we ask a time that is not exactly in the arrays of structures, we'll get the closest (causal!) time-slice

eqt = dd.equilibrium.time_slice[0.9]
eqt.time

eqt = dd.equilibrium.time_slice[1.1]
eqt.time
1.0

... or at the current dd.global_time by leaving the square brackets empty []

NOTE: using [] is what you want to use in most situations that involve time-dependent arrays of structures!

dd.global_time = 0.0
eqt = dd.equilibrium.time_slice[]
eqt.time

dd.global_time = 1.0
eqt = dd.equilibrium.time_slice[]
eqt.time
1.0

What we described above was for time-dependent arrays of structures.

The other place where time comes in, is when dealing with time-dependent arrays of data.

In this case, we can use the @ddtime macro to manipulate these time-dependent arrays at dd.global_time.

NOTE: Also in this case, @ddtime will operate on the closest (causal!) time point

dd.equilibrium.vacuum_toroidal_field.b0

dd.global_time = 1.0
@ddtime(dd.equilibrium.vacuum_toroidal_field.b0 = 10.0)
dd.equilibrium.vacuum_toroidal_field.b0

dd.global_time = 0.0
@ddtime(dd.equilibrium.vacuum_toroidal_field.b0)

dd.global_time = 1.0
@ddtime(dd.equilibrium.vacuum_toroidal_field.b0)
10.0

Expressions in dd

Some fields in the data dictionary are expressions (ie. Functions). For example dd.core_profiles.profiles_1d[].pressure is dynamically calculated as the product of thermal densities and temperature with addition of fast ions contributions

dd.global_time = 0.0
print_tree(dd.core_profiles.profiles_1d[]; maxdepth=1)
1
├─ conductivity_parallel ➡ Function [ohm^-1.m^-1]
├─ electrons
│  ⋮
│
├─ grid
│  ⋮
│
├─ ion
│  ⋮
│
├─ j_bootstrap ➡ 101-element Vector{Float64} [A/m^2]
│                min:378   avg:1.12e+05   max:5.63e+05
├─ j_non_inductive ➡ 101-element Vector{Float64} [A/m^2]
│                    min:2.96e+03   avg:4.91e+05   max:1.31e+06
├─ j_ohmic ➡ 101-element Vector{Float64} [A/m^2]
│            min:972   avg:3.81e+05   max:6.56e+05
├─ j_tor ➡ 101-element Vector{Float64} [A/m^2]
│          min:8.18e+03   avg:8.66e+05   max:1.98e+06
├─ j_total ➡ 101-element Vector{Float64} [A/m^2]
│            min:9.1e+03   avg:8.73e+05   max:1.96e+06
├─ neutral
│  ⋮
│
├─ pressure ➡ Function [Pa]
├─ pressure_ion_total ➡ Function [Pa]
├─ pressure_parallel ➡ Function [Pa]
├─ pressure_perpendicular ➡ Function [Pa]
├─ pressure_thermal ➡ Function [Pa]
├─ rotation_frequency_tor_sonic ➡ 101-element Vector{Float64} [s^-1]
│                                 all:0
├─ t_i_average ➡ Function [eV]
├─ time ➡ 0 [s]
└─ zeff ➡ 101-element Vector{Float64}
          all:2

accessing a dynamic expression, automatically evaluates it

dd.core_profiles.profiles_1d[].conductivity_parallel
101-element Vector{Float64}:
      1.5965042990819001e9
      1.5539525714417021e9
      1.4967376240114691e9
      1.4372326642469559e9
      1.3769142969231076e9
      1.3161803643176403e9
      1.2666353881417987e9
      1.223459160721668e9
      1.1841141009344788e9
      1.149791354579876e9
      ⋮
      9.501250880529523e7
      7.898892055174997e7
      6.242582877860529e7
      4.665292944358043e7
      3.2737812452158187e7
      2.1292972756236613e7
      1.236132513568004e7
      5.573991582842473e6
 659144.8608666097

In addition to evaluating expressions by accessing them, expressions in the tree can be evaluated using IMAS.freeze(ids)

NOTE: IMAS.freeze(ids, field::Symbol) works on a single field and IMAS.refreeze!(ids, field) forces re-evaluation of an expression. Also, IMAS.empty!(ids, field::Symbol) can be used to revert a frozen field back into an expression.

print_tree(IMAS.freeze(dd.core_profiles.profiles_1d[1]); maxdepth=1)
profiles_1d [DETACHED]
├─ conductivity_parallel ➡ 101-element Vector{Float64} [ohm^-1.m^-1]
│                          min:6.59e+05   avg:4.69e+08   max:1.6e+09
├─ electrons
│  ⋮
│
├─ grid
│  ⋮
│
├─ ion
│  ⋮
│
├─ j_bootstrap ➡ 101-element Vector{Float64} [A/m^2]
│                min:378   avg:1.12e+05   max:5.63e+05
├─ j_non_inductive ➡ 101-element Vector{Float64} [A/m^2]
│                    min:2.96e+03   avg:4.91e+05   max:1.31e+06
├─ j_ohmic ➡ 101-element Vector{Float64} [A/m^2]
│            min:972   avg:3.81e+05   max:6.56e+05
├─ j_tor ➡ 101-element Vector{Float64} [A/m^2]
│          min:8.18e+03   avg:8.66e+05   max:1.98e+06
├─ j_total ➡ 101-element Vector{Float64} [A/m^2]
│            min:9.1e+03   avg:8.73e+05   max:1.96e+06
├─ neutral
│  ⋮
│
├─ pressure ➡ 101-element Vector{Float64} [Pa]
│             min:430   avg:2.7e+05   max:5.03e+05
├─ pressure_ion_total ➡ 101-element Vector{Float64} [Pa]
│                       min:205   avg:1.22e+05   max:2.34e+05
├─ pressure_parallel ➡ 101-element Vector{Float64} [Pa]
│                      min:143   avg:9e+04   max:1.68e+05
├─ pressure_perpendicular ➡ 101-element Vector{Float64} [Pa]
│                           min:143   avg:9e+04   max:1.68e+05
├─ pressure_thermal ➡ 101-element Vector{Float64} [Pa]
│                     min:430   avg:2.7e+05   max:5.03e+05
├─ rotation_frequency_tor_sonic ➡ 101-element Vector{Float64} [s^-1]
│                                 all:0
├─ t_i_average ➡ 101-element Vector{Float64} [eV]
│                min:85.1   avg:1.01e+04   max:1.81e+04
├─ time ➡ 0 [s]
└─ zeff ➡ 101-element Vector{Float64}
          all:2

Comparing two IDSs

We can introduce a change in the dd1 and spot it with the diff function

dd1.equilibrium.time_slice[1].time = -100.0
IMAS.diff(dd.equilibrium, dd1.equilibrium)
Dict{String, String} with 3 entries:
  "time"                     => "length:  2 --  1"
  "vacuum_toroidal_field.b0" => "length:  2 --  1"
  "time_slice"               => "length:  2 --  1"

Summary

Snapshot of dd in 0D quantities (evaluated at dd.global_time).

Extract + plots saved to PDF (printed to screen if filename is omitted). NOTE: For PDF creation to work, one may need to install of DejaVu Sans Mono font.

filename = joinpath(tutorial_temp_dir, "$(ini.general.casename).pdf")
display(filename)
FUSE.digest(dd)#, filename)