# RAPTOR Tutorial MEX. Learn how to accelerate simulations using mex files

## Contents

- Run without MEX file
- Run with MEX file
- MEX files regenerated only in case of code change

## Run without MEX file

    close all hidden;
    % Start a simple RAPTOR run
    run(fullfile(pwd,'..','RAPTOR_path.m')); % add RAPTOR path
    [config] = RAPTOR_config; % load default params
    % set longer default time
    config.grid.tgrid = 0:1e-3:0.5;
    [model,params,init,g,v,U] = build_RAPTOR_model(config); % generate model structure for these params.
    x0 = RAPTOR_initial_conditions(model,init,g(:,1),v(:,1));  % Define the initial condition
    U(1,:) = init.Ip0*ones(size(params.tgrid)); % input Ip trace: constant 80kA

This does not generate mex files. Let's test the timing

    params.debug.iterdisp = 0; % turn off display
    tic
    simres = RAPTOR_predictive(x0,g,v,U,model,params);
    toc

    Elapsed time is 6.152081 seconds.

## Run with MEX file

We can generate mex files for the time step function at the time of the model generation

    config.buildopts.mexify = true;
    [model,params,~,~,~] = build_RAPTOR_model(config); % generate model structure for these params.

    Generating mex for RAPTOR_predictive_step, please wait...Warning: Removed
    '/afs/ipp-garching.mpg.de/home/f/ffelici/matlab/RAPTOR/code/coder/codegen/interface'
    from the MATLAB path for this MATLAB session.
    	See 'doc path' for more information.
    ..done

Now try the timing again

    params.debug.iterdisp = 0; % turn off display
    params.numerics.usemex = true;
    tic
    simres = RAPTOR_predictive(x0,g,v,U,model,params);
    toc
    return

    Elapsed time is 3.442193 seconds.

## MEX files regenerated only in case of code change

Re-generating the RAPTOR model does not trigger new MEX file generation if the MEX is still compatible with the input sizes

    tic
    [model,params,init,g,v,U] = build_RAPTOR_model(config);
    toc

However if you change the model settings, a new MEX is generated

    config.grid.rhogrid = linspace(0,1,21);
    tic
    [model,params,init,g,v,U] = build_RAPTOR_model(config);
    toc