RAPTOR Tutorial 2: Change input, display control and output analysis

In this second tutorial we will customize how the simulation results are presented during the run, and will make some figures after the run. This will help underestand how profile data is stored and extracted in RAPTOR. We will also modify the input signal to have something slightly more interesting.

Contents

Preparation

Start by repeating the first two steps of the previous tutorial

clear; close all hidden;
run(fullfile(pwd,'..','RAPTOR_path.m')); % add RAPTOR path
[config] = RAPTOR_config; % load default config

% build model for these params.
[model,params,init,g,v,U] = build_RAPTOR_model(config);

Customize display options

Now we will customize the display options in the params structure to suit our needs

params.debug.iterdisp = 5; % display every 5 iterations only (default=1)
params.debug.iterplot = 1; % plot profile evolution every iteration (default=0, no plot)

Run RAPTOR with new settings

% Choose a more interesting input: modify U
nt = numel(params.tgrid);
% the first row of U is the plasma current as a function of time. Assign
% it here:
U(1,params.tgrid <0.02) = linspace(80e3,250e3,sum(params.tgrid<0.02));
U(1,params.tgrid>=0.02) = 250e3;

% Update init to have correct plasma current at first time step
init.Ip0 = U(1,1);
% Define the initial condition
x0 = RAPTOR_initial_conditions(model,init,g,v);
simres = RAPTOR_predictive(x0,g,v,U,model,params);

% For convenience, a genetic function to directly extract interesting data is available:
out = RAPTOR_out(simres,model,params);
disp(out);

figure(findall(0,'name','RAPTOR step plot')); % to bring figure forward
     it  telaps newt     res   t[ms]  dt[ms]  Ip[kA] Icd[kA] Ibs[kA] Ioh[kA]      qe    qmin      q0   Vl[V] Te0[keV] Ti0[keV] ne0[e19]   f_ss  
      1    0.56    4 5.7e-10       0       1      80       0    1.41    78.5    15.3    5.55    5.55 3.4e+00    0.21    0.21    1.00 1.1e+01 
      6     2.2    2 9.7e-09       5       1     125       0    3.08     122    9.84    3.99    3.99 6.1e+00    0.31    0.31    1.00 2.1e+01 
     11     3.8    2 1.2e-09      10       1     169       0    4.76     165    7.24    3.31    3.31 5.9e+00    0.44    0.44    1.00 2.2e+01 
     16     5.3    2 2.6e-10      15       1     214       0    6.31     208    5.73    2.84    2.84 5.7e+00    0.59    0.59    1.00 2.2e+01 
     21     6.9    3 6.7e-12      20       1     250       0    7.65     242    4.91    2.46     2.5 4.3e+00    0.76    0.76    1.00 1.7e+01 
     26     8.8    2 9.2e-10      25       1     250       0     8.3     242    4.91     2.1    2.24 3.2e+00    0.90    0.90    1.00 1.3e+01 
     31      10    2 6.6e-11      30       1     250       0    8.39     241    4.91    1.87    2.02 2.8e+00    1.01    1.01    1.00 1.1e+01 
     36      12    2 9.8e-12      35       1     250       0    8.27     242    4.91    1.69    1.81 2.6e+00    1.08    1.08    1.00 9.8e+00 
     41      13    2 2.4e-12      40       1     250       0     8.1     242    4.91    1.53    1.61 2.4e+00    1.14    1.14    1.00 8.8e+00 
     46      15    2 8.1e-13      45       1     250       0    7.93     242    4.91    1.42    1.43 2.2e+00    1.19    1.19    1.00 8.0e+00 
     51      17    2 3.3e-13      50       1     250       0    7.79     242    4.91    1.27    1.27 2.1e+00    1.24    1.24    1.00 7.3e+00 
              it: [1x51 double]
            time: [1x51 double]
           ntime: 51
             rho: [16x1 double]
        rhogauss: [60x1 double]
            nrho: 16
       nrhogauss: 60
               U: [4x51 double]
             psi: [16x51 double]
            psiN: [16x51 double]
          rhopol: [16x51 double]
            psip: [16x51 double]
             upl: [16x51 double]
        dupldrho: [16x51 double]
            f_ss: [1x51 double]
               H: [16x51 double]
              g0: [16x51 double]
              g1: [16x51 double]
              g2: [16x51 double]
              g3: [16x51 double]
           g23or: [16x51 double]
              Vp: [16x51 double]
               F: [16x51 double]
            Phib: [1x51 double]
           kappa: [16x51 double]
         epsilon: [16x51 double]
            rhob: [1x51 double]
              te: [16x51 double]
             te0: [1x51 double]
             tep: [16x51 double]
              ne: [16x51 double]
             nep: [16x51 double]
              ti: [16x51 double]
              ni: [16x51 double]
              n1: [16x51 double]
              n2: [16x51 double]
              n3: [16x51 double]
           nitot: [16x51 double]
              ze: [16x51 double]
               p: [16x51 double]
            iota: [16x51 double]
               q: [16x51 double]
           shear: [16x51 double]
          qgauss: [60x51 double]
        psigauss: [60x51 double]
      sheargauss: [60x51 double]
        uplgauss: [60x51 double]
       psiNgauss: [60x51 double]
       psipgauss: [60x51 double]
              Ip: [16x51 double]
            jtor: [16x51 double]
            jpar: [16x51 double]
              q0: [1x51 double]
             q95: [1x51 double]
            qmin: [1x51 double]
        jbsgauss: [60x51 double]
        jecgauss: [60x51 double]
        jnbgauss: [60x51 double]
        jlhgauss: [60x51 double]
        jicgauss: [60x51 double]
       jauxgauss: [60x51 double]
     signeogauss: [60x51 double]
       jpargauss: [60x51 double]
        johgauss: [60x51 double]
             jbs: [16x51 double]
            jaux: [16x51 double]
             joh: [16x51 double]
             jec: [16x51 double]
             jnb: [16x51 double]
             jlh: [16x51 double]
             jic: [16x51 double]
          signeo: [16x51 double]
        pohgauss: [60x51 double]
        pecgauss: [60x51 double]
       pnbegauss: [60x51 double]
       pnbigauss: [60x51 double]
        plhgauss: [60x51 double]
       picegauss: [60x51 double]
       picigauss: [60x51 double]
      pauxegauss: [60x51 double]
      pauxigauss: [60x51 double]
    palphaegauss: [60x51 double]
    palphaigauss: [60x51 double]
      pbremgauss: [60x51 double]
       pradgauss: [60x51 double]
        peigauss: [60x51 double]
       chiegauss: [60x51 double]
       chiigauss: [60x51 double]
             poh: [16x51 double]
             pec: [16x51 double]
            pnbe: [16x51 double]
            pnbi: [16x51 double]
             plh: [16x51 double]
            pice: [16x51 double]
            pici: [16x51 double]
           pauxe: [16x51 double]
           pauxi: [16x51 double]
         palphae: [16x51 double]
         palphai: [16x51 double]
           pbrem: [16x51 double]
            prad: [16x51 double]
             pei: [16x51 double]
            chie: [16x51 double]
            chii: [16x51 double]
             dne: [16x51 double]
             vne: [16x51 double]
             sne: [16x51 double]
            pein: [16x51 double]
           peout: [16x51 double]
           penet: [16x51 double]
            piin: [16x51 double]
           piout: [16x51 double]
           pinet: [16x51 double]
         tegauss: [60x51 double]
         negauss: [60x51 double]
         tigauss: [60x51 double]
         nigauss: [60x51 double]
              We: [1x51 double]
              Wi: [1x51 double]
             Wth: [1x51 double]
            Wpol: [1x51 double]
             Ibs: [16x51 double]
             Iec: [16x51 double]
             Ilh: [16x51 double]
             Iic: [16x51 double]
             Inb: [16x51 double]
            Iaux: [16x51 double]
             Poh: [1x51 double]
           Pauxe: [1x51 double]
           Pauxi: [1x51 double]
         Pauxtot: [1x51 double]
       Palphatot: [1x51 double]
         Palphai: [1x51 double]
         Palphae: [1x51 double]
           Pbrem: [1x51 double]
            Prad: [1x51 double]
           Pcycl: [1x51 double]
             Pei: [1x51 double]
             Pec: [1x51 double]
            Pnbe: [1x51 double]
            Pnbi: [1x51 double]
            Pice: [1x51 double]
            Pici: [1x51 double]
          Volume: [16x51 double]
         ne20avg: [1x51 double]
            neGR: [1x51 double]
          fne_gr: [1x51 double]
             nel: [1x51 double]
          pprime: [60x51 double]
         ttprime: [60x51 double]
           rbphi: [16x51 double]
            beta: [1x51 double]
           betaN: [1x51 double]
         betapol: [1x51 double]
         rhoq1_1: [1x51 double]
         rhoq2_1: [1x51 double]
         rhoq3_1: [1x51 double]
         rhoq1_2: [1x51 double]
         rhoq2_2: [1x51 double]
         rhoq3_2: [1x51 double]
              Li: [1x51 double]
             li3: [1x51 double]
             pav: [1x51 double]
             Ini: [16x51 double]
             Ioh: [16x51 double]
             fbs: [1x51 double]
            faux: [1x51 double]
             fni: [1x51 double]
             foh: [1x51 double]
             PLH: [1x51 double]
           Pecin: [1x51 double]
           Pnbin: [1x51 double]
           Picin: [1x51 double]
            Pein: [1x51 double]
           Peout: [1x51 double]
           Penet: [1x51 double]
            Piin: [1x51 double]
           Piout: [1x51 double]
           Pinet: [1x51 double]
         Pfusion: [1x51 double]
          Palpha: [1x51 double]
           Pheat: [1x51 double]
               Q: [1x51 double]
          Ptotin: [1x51 double]
           dWtdt: [1x51 double]
           Ploss: [1x51 double]
            tauE: [1x51 double]
        tauE_H98: [1x51 double]
             H98: [1x51 double]
          rhodep: []
              ST: [1x51 logical]
         STtimes: [1x0 double]
           STper: 0
           df_dx: {1x51 cell}
        df_dxdot: {1x51 cell}
          df_dxk: {1x51 cell}
         df_dxk1: {1x51 cell}
           df_du: {1x51 cell}

Customized display of results

% surf plots
subplot(231); surf(out.time,out.rho,out.psi); xlabel('t [s]'); ylabel('\rho'); title('\psi[Wb]');
subplot(232); surf(out.time,out.rho,out.q); xlabel('t [s]'); ylabel('\rho'); title('q');
subplot(233); surf(out.time,out.rho,out.Ip); xlabel('t [s]'); ylabel('\rho'); title('I_p');
subplot(234); surf(out.time,out.rho,out.upl); xlabel('t [s]'); ylabel('\rho'); title('U_{pl} [V]');
subplot(235); surf(out.time,out.rho,out.te); xlabel('t [s]'); ylabel('\rho'); title('T_e [eV]');
subplot(236); surf(out.time,out.rho,out.tep); xlabel('t [s]'); ylabel('\rho'); title('dT_e/d\rho [eV]');

note that some quantities in this output are also given on the grid of gauss points: out.rhogauss, though the normal grid version is also available. Beware, the normal grid point values are just a linear interpolation/extrapolation of the gauss point values.

clf;
hp=plot(out.rhogauss,out.jbsgauss(:,end),'x',out.rho,out.jbs(:,end),'o');
grid on; ylabel('[A/m^2]'); xlabel('\rho'); title('j_{BS}');
legend(hp,{'gauss grid points','main grid points'},'location','northeast')

Interactive plotting tool

There exists an interactive plotting tool to plot several RAPTOR results at the same time, allowing one to adjust the time of the plotted profiles with the mouse

outs{1} = out; % store old out structure

% Do a new RAPTOR run with different input parameters
params.debug.iterplot = 0; % do not plot this time
U = bsxfun(@times,U,linspace(1,2,numel(params.tgrid))); % scale U
simres = RAPTOR_predictive(x0,g,v,U,model,params);
outs{2} = RAPTOR_out(simres,model,params); % different structure
     it  telaps newt     res   t[ms]  dt[ms]  Ip[kA] Icd[kA] Ibs[kA] Ioh[kA]      qe    qmin      q0   Vl[V] Te0[keV] Ti0[keV] ne0[e19]   f_ss  
      1   0.048    4 5.7e-10       0       1      80       0    1.41    78.5    15.3    5.55    5.55 3.4e+00    0.21    0.21    1.00 1.1e+01 
      6    0.18    3 3.9e-15       5       1     137       0    3.29     134    8.94    4.05    4.05 6.8e+00    0.32    0.32    1.00 2.6e+01 
     11     0.3    3 8.7e-15      10       1     203       0    5.55     198    6.03    3.44    3.44 6.9e+00    0.48    0.48    1.00 3.0e+01 
     16    0.42    2 9.7e-09      15       1     278       0    7.87     270    4.41    2.69    3.05 6.8e+00    0.70    0.70    1.00 3.2e+01 
     21    0.51    3 2.1e-11      20       1     350       0    10.2     340    3.51    2.14    2.79 5.5e+00    0.96    0.96    1.00 2.6e+01 
     26    0.63    2 1.0e-09      25       1     375       0      12     363    3.27    1.82    2.61 4.4e+00    1.23    1.23    1.00 2.0e+01 
     31    0.72    2 5.2e-11      30       1     400       0    13.1     387    3.07    1.61    2.48 4.1e+00    1.47    1.47    1.00 1.8e+01 
     36    0.82    2 6.9e-12      35       1     425       0    13.8     411    2.89    1.48    2.37 3.8e+00    1.66    1.66    1.00 1.7e+01 
     41    0.91    2 1.3e-12      40       1     450       0    14.2     436    2.73    1.37    2.27 3.7e+00    1.83    1.83    1.00 1.6e+01 
     46       1    2 4.0e-13      45       1     475       0    14.4     460    2.58    1.27    2.18 3.5e+00    1.98    1.98    1.00 1.5e+01 
     51     1.1    2 1.6e-13      50       1     500       0    14.5     485    2.45     1.2    2.09 3.4e+00    2.12    2.12    1.00 1.5e+01 

Plot 'overview'

hf = RAPTOR_plot_GUI(outs,'overview');
% drag your mouse over the time traces to see the time evolution
figure(hf); % make visible to export
Warning: could not plot
 Xdata:out.rho
 Ydata:[1]*ones(size(out.rho))
 
Warning: could not plot
 Xdata:out.rho
 Ydata:[2]*ones(size(out.rho))
 
Warning: could not plot
 Xdata:out.rho
 Ydata:[3]*ones(size(out.rho))
 
Warning: could not plot
 Xdata:out.rho
 Ydata:[1]*ones(size(out.rho))
 
Warning: could not plot
 Xdata:out.rho
 Ydata:[2]*ones(size(out.rho))
 
Warning: could not plot
 Xdata:out.rho
 Ydata:[3]*ones(size(out.rho))
 

end of tutorial