Contents
RAPTOR RT demo: Simple test of real-time observer
clear;
versionstr=version; assert(eval(versionstr(1:3))>=8,'Does not work for MATLAB version < 8.0')
addpath ../RAPTOR_code/
addpath ../RT/TCV/
RAPTOR config
dt = 2e-3;
fprintf('Configuring RAPTOR_TCV for dt=%2.1fms\n',dt*1e3)
[config] = RAPTOR_config('TCV');
config.grid.tgrid = [0:dt:0.5];
[~,RAPTORmodel,RAPTORparams,init] = RAPTOR_config(config);
init.te0 = 200;
RAPTORparams.debug.iterdisp = 0;
RAPTORparams.debug.iterplot = 0;
RAPTORparams.numerics.nmax = 1;
RAPTORparams.numerics.realtime = true;
Ip0 = 80e3;
[x0,g0,v0] = RAPTOR_initial_conditions(Ip0,RAPTORmodel,init);
Configuring RAPTOR_TCV for dt=2.0ms
loading CHEASE equilibrium from /home/ffelici/matlab/RAPTOR-RT/chease_equils/TCV_41083_cheasedata
Scaling Te initial condition to match edge value boundary value (50)
Kalman Filter configuration
nx = RAPTORmodel.psi.nsp + RAPTORmodel.te.nsp;
KFparams = RAPTOR_EKF_config;
KFparams.ndx = 2;
KFparams.Lgain = 1;
KFparams.Ipstart = Ip0;
KFparams.Ipstop = Ip0-20e3;
KFparams.x_cov = [1e-3,1e-5,1e3,1e2,1e-3];
KFparams.d_cov = 0.01*[1e-4,1e-5,1e3,1e3,1e-3];
KFparams.x_sm = [0.6,0.6];
KFparams.d_sm = [10,10];
KFparams.s0 = 1e-1;
KFparams.iterdisp = 0;
KFparams.iterplot = 0;
nu = numel(RAPTORparams.echcd.uindices)+1;
u0 = zeros(nu,1);
[KFmodel,KFparams] = RAPTOR_EKF_config(x0,u0,RAPTORmodel,RAPTORparams,KFparams);
Input signals: fake diagnostic measurements
Te0noise = 100;
Ipflattop = 200e3;
rampfun = @(t,tmin,ymin,tmax,ymax) ...
max(ymin,min((ymax-ymin)/(tmax-tmin)*(t-tmin),ymax-ymin)+ymin);
t = RAPTORparams.tgrid.tgrid;
ne_profile = 2e19*exp(-RAPTORmodel.rgrid.rhogauss.^2/0.8^2)*ones(1,numel(t));
Ip = rampfun(t, 0, 0, 0.1, Ipflattop) - rampfun(t, 0.4, 0, 0.5, Ipflattop);
Te0 = (Ip/Ipflattop)*2e3 + Te0noise*randn(size(t));
Psib = 1.5*t;
P_EC = [1;1]*rampfun(t, 0, 0, 0.1, 0e3);
ts_Ip = timeseries(Ip',t);
ts_Te0 = timeseries(Te0',t);
ts_ne_profile = timeseries(ne_profile',t);
ts_Psib = timeseries(Psib',t);
ts_P_EC = timeseries(P_EC',t);
Configure and run simulink
clear simParams
simParams.LoadExternalInput = 'on';
simParams.ExternalInput = 'ts_Ip,ts_Te0,ts_ne_profile,ts_Psib,ts_P_EC';
simParams.StartTime = num2str(RAPTORparams.tgrid.tgrid(1));
simParams.StopTime = num2str(RAPTORparams.tgrid.tgrid(end));
simParams.Fixedstep = num2str(RAPTORparams.tgrid.dt);
numerics = RAPTORparams.numerics;
modelname = 'RAPTOR_TCV_demo';
fprintf('Running simulink model %s, please wait...\n',modelname);
simOut = sim(modelname,simParams);
Running simulink model RAPTOR_TCV_demo, please wait...
plot results
logsout = simOut.get('logsout');
figure(1); clf;
subplot(411);
plot(logsout.get('Ip').Values);
subplot(412);
plot(logsout.get('iota').Values);
subplot(413);
plot(logsout.get('Te0').Values,'k.'); hold on;
plot(logsout.get('te').Values);
title('Te0 and simulated Te');
subplot(414);
plot(logsout.get('dte').Values);