Skip to content
Snippets Groups Projects
torbeam_prepare_inputs_and_run.m 19.4 KiB
Newer Older
function [torbeam_out,torbeam_in,varargout] = torbeam_prepare_inputs_and_run(shot,times_in,varargin);
%
% [torbeam_out,torbeam_in,varargout] = torbeam_prepare_inputs_and_run(shot,times_in,varargin);
% 
% varargin{1}: torbeam_in (from a previous run, so avoids to reload all the data)
%              leave then times_in empty to rerun at all times in torbeam_in.inbeam.t_some_beam_on or select times points from that array
% varargin{2}: source for gdat profiles/equilibrium related: [] (default sources), 'IDA' (IDA/IDE sources), {'TRA','expname'} for TRANSP
% varargin{3}: source for torbeam angles: 0 (default) from conversion from ECS/ECN with aug_setval2tp_mex; 1 from TBP/git shotfile
% varargin{4}: nb of radial points for outputs in shotfile structure (default 401)
% varargin{5}: if >0: zeff default if no data in gdat(shot,'zeff') (2. is default)
%              if <0: zeff value (abs(varargin{5}) to impose for all times
%       [torbeam_out,torbeam_in] = torbeam_prepare_inputs_and_run(30594,linspace(0,10,101));
%       [torbeam_out2] = torbeam_prepare_inputs_and_run(30594,torbeam_in.inbeam.t_some_beam_on(1:30:end),torbeam_in); % to rerun a few cases
if nargin==0 || isempty(shot)
  error('requires shot number')
  return
end
times_for_torbeam_eff = [];
if nargin>=2 && ~isempty(times_in)
  times_for_torbeam_eff = times_in;
end

doload = 1;
if nargin>=3 && ~isempty(varargin{1})
  torbeam_in = varargin{1};
  doload = 0;
end
torbeam_in.prepare_run_options.doload = doload;

source_gdat_profiles = [];
source_gdat_profiles_exp_name = [];
if nargin>=4 && ~isempty(varargin{2})
  if ~iscell( varargin{2})
    source_gdat_profiles = varargin{2};
  else
    if length(varargin{2}) >= 2
      source_gdat_profiles = varargin{2}{1};
      source_gdat_profiles_exp_name = varargin{2}{2};
    else
      error('expects cell(2) if for source and exp_name if a cell is provided for profiles');
    end
  end
end
torbeam_in.prepare_run_options.source_gdat_profiles = source_gdat_profiles;
torbeam_in.prepare_run_options.source_gdat_profiles_exp_name = source_gdat_profiles_exp_name;

tbangles_source = 0;
if nargin>=5 && ~isempty(varargin{3})
  tbangles_source = varargin{3};
end
torbeam_in.prepare_run_options.tbangles_source = tbangles_source;

nb_points_shotfile = 401;
if nargin>=6 && ~isempty(varargin{4})
  nb_points_shotfile = varargin{4};
end
torbeam_in.prepare_run_options.nb_points_shotfile = nb_points_shotfile;
zeff_default = 2.0;
if nargin>=7 && ~isempty(varargin{5})
  zeff_default = varargin{5};
end
torbeam_in.prepare_run_options.zeff_default = zeff_default;

  if isempty(source_gdat_profiles_exp_name)
    torbeam_in.nete = gdat(shot,'nete_rho','machine','aug','source',source_gdat_profiles);
    torbeam_in.zeff = gdat(shot,'zeff','machine','aug');
  else
    torbeam_in.nete=gdat(shot,'nete_rho','machine','aug','source',source_gdat_profiles,'source_exp_name',source_gdat_profiles_exp_name);
    torbeam_in.zeff = gdat(shot,'zeff','machine','aug','source_exp_name',source_gdat_profiles_exp_name);
  % qrho_and_grid=gdat(shot,'q_rho','machine','aug');
else
  if ~isfield(torbeam_in,'nete') || isempty(torbeam_in.nete)
    error('expects nete as field of torbeam_in (varargin{1}) from gdat(shot,''nete_rho'')')
  end
  if ~isfield(torbeam_in,'zeff') || isempty(torbeam_in.zeff)
    error('expects zeff as field of torbeam_in (varargin{1}) from gdat(shot,''zeff'')')
  end
end

% base all times on Te data (most important? although ne as well), note take Thomson by default to avoid cut-off
if doload && (~exist('times_for_torbeam_eff') || isempty(times_for_torbeam_eff)),
  times_for_torbeam_eff = torbeam_in.nete.fit.t(torbeam_in.nete.fit.t>0);
end
% load beam releated data including theta,phi in torbeam reference
if doload, 
  [torbeam_in.inbeam] = read_ech_py(shot,times_for_torbeam_eff,[],tbangles_source);
Olivier Sauter's avatar
Olivier Sauter committed
  times_for_torbeam_eff = torbeam_in.inbeam.t_some_beam_on;
else
   if ~isfield(torbeam_in,'inbeam') || isempty(torbeam_in.inbeam)
    error('expects inbeam as field of torbeam_in (varargin{1}) from read_ech_py(shot,times_for_torbeam)')
  end
end
if isempty(times_for_torbeam_eff)
  disp(char(10))
  warning(['no times with beams on, return' char(10)])
  return
end
% if torbeam_in provided as input (with its own time input sequence) and times_in provided as well: need to adapt times_in to match available inputs
% (otherwise would take closest eqdsk)
if doload==0
  if ~isempty(times_for_torbeam_eff)
    times_for_torbeam_eff = intersect(torbeam_in.inbeam.t_some_beam_on,times_for_torbeam_eff);
  else
    times_for_torbeam_eff = torbeam_in.inbeam.t_some_beam_on;
  end
  torbeam_in.eqd_all=gdat(shot,'eqdsk','time',torbeam_in.inbeam.t_some_beam_on,'write',0,'source',source_gdat_profiles,'doplot',0);
  torbeam_in.dir_torbeam = ['/tmp/' getenv('USER') '/' num2str(shot) '_torbeam'];
Olivier Sauter's avatar
Olivier Sauter committed
  unix(['mkdir -p ' torbeam_in.dir_torbeam]);
else
  if ~isfield(torbeam_in,'eqd_all') || isempty(torbeam_in.eqd_all)
    error('expects eqd_all as field of torbeam_in (varargin{1}) from gdat(shot,''eqdsk'',''time'',torbeam_in.inbeam.t_some_beam_on,''write'',0,''doplot'',0);')
if length(torbeam_in.eqd_all.eqdsk) < 1
  error('expects non empty torbeam_in.eqd_all.eqdsk')
end
r0exp = torbeam_in.eqd_all.eqdsk{1}.r0;

if doload; disp(['time for reading data: ' num2str(toc)]); end
  rhofit = linspace(0,1,nb_points_prof)';
  
  tb_par_fields=fieldnames(torbeam_in.inbeam.tb_par);

  itime_te = iround_os(torbeam_in.nete.fit.t,times_for_torbeam_eff);
  itime_ne = iround_os(torbeam_in.nete.fit.t,times_for_torbeam_eff);
  it_inb = iround_os(torbeam_in.inbeam.t,times_for_torbeam_eff);
  cocos_out = 17;
  cocos_in = 17;
  if strcmp(upper(source_gdat_profiles),'TRA')
    cocos_in = 17;
  end
  tic
  for it=1:length(torbeam_in.inbeam.t_some_beam_on)
    % Te
    it_te = itime_te(it);
    torbeam_in.fname{it}.te = fullfile(torbeam_in.dir_torbeam,['Te' '_t' num2str(torbeam_in.inbeam.t_some_beam_on(it)) '.dat']);
    fid=fopen(torbeam_in.fname{it}.te,'w'); % te.dat file etc per time
    fprintf(fid,'%d\n',nb_points_prof);
    % tefit = interpos(torbeam_in.nete.fit.rhopolnorm(:,it_te) , torbeam_in.nete.fit.te.data(:,it_te),rhofit,-1,[1 2],[0 0]);
    tefit = interpos(torbeam_in.nete.fit.rhopolnorm(:,it_te) , torbeam_in.nete.fit.te.data(:,it_te),rhofit,-0.1,[1 0],[0 0]);
    aa=[rhofit(end:-1:1) , abs(tefit(end:-1:1))/1e3]; % in keV
    fprintf(fid,'%.7f %.7f\n',aa');
    fclose(fid);
    % ne
    it_ne = itime_ne(it);
    torbeam_in.fname{it}.ne = fullfile(torbeam_in.dir_torbeam,['ne' '_t' num2str(torbeam_in.inbeam.t_some_beam_on(it)) '.dat']);
    fid=fopen(torbeam_in.fname{it}.ne,'w'); % ne.dat file etc per time
    fprintf(fid,'%d\n',nb_points_prof);
    nefit = interpos(torbeam_in.nete.fit.rhopolnorm(:,it_ne) , torbeam_in.nete.fit.ne.data(:,it_ne),rhofit,-0.1,[1 0],[0 0]);
    aa=[rhofit(end:-1:1) , abs(nefit(end:-1:1))/1e19]; % in 1e19
    fprintf(fid,'%.6f %.6f\n',aa');
    fclose(fid);
    % topfile
    % eqd_with_b = read_eqdsk(torbeam_in.eqd_all.eqdsk{it},cocos_in,1);
    eqd_with_b2=eqdsk_cocos_transform(torbeam_in.eqd_all.eqdsk{it},[cocos_in cocos_out]);
    eqd_with_b1=eqdsk_transform(eqd_with_b2,65,129,-0.1);
    eqd_with_b = read_eqdsk(eqd_with_b1,cocos_out,1); % to compute BR, etc
    torbeam_in.fname{it}.topfile = fullfile(torbeam_in.dir_torbeam,['topfile' '_t' num2str(torbeam_in.inbeam.t_some_beam_on(it))]);
    fid=fopen(torbeam_in.fname{it}.topfile,'w');
    fprintf(fid,'%s %d %.6f\n',' Number of radial and vertical grid points in ',shot,torbeam_in.inbeam.t_some_beam_on(it));
    fprintf(fid,'%d %d\n',length(eqd_with_b.rmesh),length(eqd_with_b.zmesh));
    fprintf(fid,'%s\n','Inside and Outside radius and psi_sep');
    psi_shift = 0.; % or eqd_with_b.psiedge for 0 value at edge
    fprintf(fid,'%.6f %.6f %.6f\n',min(eqd_with_b.rmesh),max(eqd_with_b.rmesh),eqd_with_b.psiedge-psi_shift);
    fprintf(fid,'%s\n','Radial grid coordinates');
    nb_rmesh = length(eqd_with_b.rmesh);
    nb_zmesh = length(eqd_with_b.zmesh);
    fprintf(fid,'%14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f\n',eqd_with_b.rmesh(1:nb_rmesh));
    if mod(nb_rmesh,8) ~= 0; fprintf(fid,'\n'); end
    fprintf(fid,'%s\n','Vertical grid coordinates');
    fprintf(fid,'%14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f\n',eqd_with_b.zmesh(1:nb_zmesh));
    if mod(nb_zmesh,8) ~= 0; fprintf(fid,'\n'); end
    fprintf(fid,'%s\n','B_r values');
    fprintf(fid,'%14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f\n',eqd_with_b.BR(1:nb_rmesh,1:nb_zmesh));
    if mod(nb_rmesh*nb_zmesh,8) ~= 0; fprintf(fid,'\n'); end
    fprintf(fid,'%s\n','B_t values');
    fprintf(fid,'%14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f\n',eqd_with_b.Bphi(1:nb_rmesh,1:nb_zmesh));
    if mod(nb_rmesh*nb_zmesh,8) ~= 0; fprintf(fid,'\n'); end
    fprintf(fid,'%s\n','B_z values');
    fprintf(fid,'%14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f\n',eqd_with_b.BZ(1:nb_rmesh,1:nb_zmesh));
    if mod(nb_rmesh*nb_zmesh,8) ~= 0; fprintf(fid,'\n'); end
% $$$   fprintf(fid,'%s\n','psi norm values');
% $$$   fprintf(fid,'%14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f\n',(eqd_with_b.psi(1:nb_rmesh,1:nb_zmesh)-eqd_with_b.psiaxis) ...
% $$$           ./ (eqd_with_b.psiedge-eqd_with_b.psiaxis));
    fprintf(fid,'%s\n',['psi cocos_out=' num2str(cocos_out)]);
    fprintf(fid,'%14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f\n',eqd_with_b.psi(1:nb_rmesh,1:nb_zmesh));
    if mod(nb_rmesh*nb_zmesh,8) ~= 0; fprintf(fid,'\n'); end
    fclose(fid);
    
    if isempty(torbeam_in.zeff.data) || torbeam_in.prepare_run_options.zeff_default < 0.
      zeff_eff = abs(torbeam_in.prepare_run_options.zeff_default);
    else
      zeff_eff = interpos(21,torbeam_in.zeff.t,torbeam_in.zeff.data,torbeam_in.inbeam.t_some_beam_on(it));
    end
    torbeam_in.inbeam.zeff_t(it_inb(it)) = zeff_eff;
    % extract beam info at given time
    for ibeam=find(torbeam_in.inbeam.beam_on(:,it_inb(it)))',
      torbeam_in.fname{it}.inbeam{ibeam} = fullfile(torbeam_in.dir_torbeam,['inbeam' '_t' num2str(torbeam_in.inbeam.t_some_beam_on(it)) 'g' num2str(ibeam) '.dat']);
      [aa,bb]=unix(['cp /afs/ipp-garching.mpg.de/home/o/osauter/TORBEAM/inbeam_default.dat ' torbeam_in.fname{it}.inbeam{ibeam}]);
      fid=fopen(torbeam_in.fname{it}.inbeam{ibeam},'a');
      fprintf(fid,' xf = %f,	     ! wave frequency om=2*pi*xf\n',torbeam_in.inbeam.freq(ibeam));
      fprintf(fid,' nmod = %d,          ! mode selection: O-mode (1), X-mode (-1)\n',torbeam_in.inbeam.rfmod(ibeam));
      fprintf(fid,' xtordeg = %f,	     ! geom. optics injection angle\n',torbeam_in.inbeam.phi_t(ibeam,it_inb(it)));
      fprintf(fid,' xpoldeg = %f,	     ! geom. optics injection angle\n',torbeam_in.inbeam.theta_t(ibeam,it_inb(it)));
      % may be position and curvature, but get defaults from tb_gui. Check with tb_gui how several launchers are given
      for i=1:length(tb_par_fields)
        fprintf(fid,[' ' tb_par_fields{i} ' = %f,\n'],torbeam_in.inbeam.tb_par.(tb_par_fields{i})(ibeam));
      end
      fprintf(fid,' xpw0 = %f,\n',torbeam_in.inbeam.power_t(ibeam,it_inb(it))/1.e6);
      fprintf(fid,' xzeff = %f,\n',torbeam_in.inbeam.zeff_t(it_inb(it)));
      fprintf(fid,'/\n');
      fclose(fid);
    end
  end
  disp(['time for creating all input files: ' num2str(toc)])
end
%                   namelist,  ol proj 3 rays(R,z)*100, not used now,  tor proj 3 rays(R,Y),  vol()   dP/dV(rhopol) j(rhopol)
%tb_out_files_to_cp = {'echo.dat', 't1_LIB.dat', 't2_LIB.dat', 't1tor_LIB.dat', 'volumes.dat', 't2_new_LIB.dat', 'cntpr.dat'};
tb_out_files_to_cp = {'t1_LIB.dat', 't1tor_LIB.dat', 'volumes.dat', 't2_new_LIB.dat'};
tb_out_files_to_cp_varname = strrep(tb_out_files_to_cp,'.dat','');
torbeam_out.run_torbeam = false .* ones(size(torbeam_in.inbeam.power_t,1),length(times_for_torbeam_eff));
it_inb_beam_on = iround_os(torbeam_in.inbeam.t_some_beam_on,times_for_torbeam_eff);
it_inb = iround_os(torbeam_in.inbeam.t,times_for_torbeam_eff);
torbeam_out.t = torbeam_in.inbeam.t_some_beam_on(it_inb_beam_on);
torbeam_out.shotfile.rhopol = linspace(0,1,nb_points_shotfile);
torbeam_out.shot = shot;
torbeam_out.shotfile.shot = shot;
torbeam_out.shotfile.t = torbeam_out.t;
ld_library_path=getenv('LD_LIBRARY_PATH'); % need /afs/@cell/common/soft/intel/ics2013/14.0/compiler/lib/intel64 (ok on toks but not toki now)
ij_intel = findstr(ld_library_path,'intel');
if isempty(ij_intel)
  warning('no intel in LD_LIBRARY_PATH, torbeam may not run properly, add manually /afs/@cell/common/soft/intel/ics2013/14.0/compiler/lib/intel64');
  ld_library_path = [ld_library_path ':/afs/@cell/common/soft/intel/ics2013/14.0/compiler/lib/intel64']; % $INTEL_HOME/compiler/lib/intel64
for it_eff=1:length(times_for_torbeam_eff)
  it = it_inb_beam_on(it_eff);
  unix(['cp ' torbeam_in.fname{it}.te ' Te.dat']);
  unix(['cp ' torbeam_in.fname{it}.ne ' ne.dat']);
  unix(['cp ' torbeam_in.fname{it}.topfile ' topfile']);
  disp(['   t=' num2str(torbeam_in.inbeam.t(it_inb(it_eff))) '   beam=' num2str(find(torbeam_in.inbeam.beam_on(:,it_inb(it_eff)))','%d')]);
  for ibeam=find(torbeam_in.inbeam.beam_on(:,it_inb(it_eff)))',
    unix(['cp ' torbeam_in.fname{it}.inbeam{ibeam} ' inbeam.dat']);
    % [a,b]=unix(['setenv LD_LIBRARY_PATH ' ld_library_path '; /afs/ipp-garching.mpg.de/home/o/osauter/TORBEAM/lib-OUT/a.out']);
    [a,b]=unix('/afs/ipp-garching.mpg.de/home/o/osauter/TORBEAM/lib-OUT/a.out');
      torbeam_out.run_torbeam(ibeam,it_eff) = true;
      torbeam_out.pabs(ibeam,it_eff) = 1e6 * sscanf(b(imw+4:end),'%f',1);
      torbeam_out.icd(ibeam,it_eff) = 1e6 * sscanf(b(ima+4:end),'%f',1);
      torbeam_out.pabs_rhopolmax(ibeam,it_eff) = sscanf(b(imaxat(1)+7:end),'%f',1);
      torbeam_out.icd_rhopolmax(ibeam,it_eff) = sscanf(b(imaxat(2)+7:end),'%f',1);
        torbeam_out.(tb_out_files_to_cp_varname{j}){ibeam,it_eff} = load(fullfile(torbeam_in.dir_torbeam,[tb_out_files_to_cp{j}]));
      torbeam_out.cntpr.tbegabs(ibeam,it_eff) = nnn(2);
      torbeam_out.cntpr.dtabs(ibeam,it_eff) = nnn(1);
      torbeam_out.pdens_jcd_rho(:,ibeam,it_eff) = torbeam_out.t2_new_LIB{ibeam,it_eff}(:,1);
      torbeam_out.pdens(:,ibeam,it_eff) = torbeam_out.t2_new_LIB{ibeam,it_eff}(:,2) * 1e6;
      torbeam_out.jcd(:,ibeam,it_eff) = torbeam_out.t2_new_LIB{ibeam,it_eff}(:,3) * 1e6;
      % structure for shot file, add rho=0 point, use a generic nb_points_shotfile
      x2 = [0.; torbeam_out.pdens_jcd_rho(:,ibeam,it_eff)];
      pdens2 = [torbeam_out.pdens(1,ibeam,it_eff); torbeam_out.pdens(:,ibeam,it_eff)];
      jcd2 = [torbeam_out.jcd(1,ibeam,it_eff); torbeam_out.jcd(:,ibeam,it_eff)];
      sig2 = ones(size(x2)); sig2(1)=1e3;
      sigvol=ones(size(torbeam_out.volumes{ibeam,it_eff}(1:end,1))); sigvol(2) = 1e3; %sigvol(2:3) = 1e3;
      torbeam_out.shotfile.volume(:,it_eff) = ...
          interpos([0.;torbeam_out.volumes{ibeam,it_eff}(2:end,1)],[0.;torbeam_out.volumes{ibeam,it_eff}(2:end,2)].^.5,torbeam_out.shotfile.rhopol,-0.001,[2 0],[0 0],sigvol);
      torbeam_out.shotfile_vol_ok(it_eff) = 1;
      if min(diff(torbeam_out.shotfile.volume(:,it_eff))) <=0
        sigvol(2:3) = 1e3;
        torbeam_out.shotfile.volume(:,it_eff) = ...
            interpos([0.;torbeam_out.volumes{ibeam,it_eff}(2:end,1)],[0.;torbeam_out.volumes{ibeam,it_eff}(2:end,2)].^.5,torbeam_out.shotfile.rhopol,-0.001,[2 0],[0 0],sigvol);
        torbeam_out.shotfile_vol_ok(it_eff) = 2;
        if min(diff(torbeam_out.shotfile.volume(:,it_eff))) <=0
          disp(char(10))
          warning(['non-monotonic volume for it_eff = ' num2str(it_eff) ' (ibeam= ' num2str(ibeam) ')' char(10)])
          torbeam_out.shotfile_vol_ok(it_eff) = 0;
        end
      end
      torbeam_out.shotfile.volume(1,it_eff) = 0.;
      torbeam_out.shotfile.volume(:,it_eff) = torbeam_out.shotfile.volume(:,it_eff).^2;
      torbeam_out.shotfile.pdens(:,ibeam,it_eff) = interpos(x2,pdens2,torbeam_out.shotfile.rhopol,-0.01,[1 0],[0 0],sig2);
      torbeam_out.shotfile.jcd(:,ibeam,it_eff) = interpos(x2,jcd2,torbeam_out.shotfile.rhopol,-0.01,[1 0],[0 0],sig2);
      if torbeam_out.shotfile_vol_ok(it_eff) > 0
        [~,~,~,torbeam_out.shotfile.pabs_int(:,ibeam,it_eff)] = interpos(torbeam_out.shotfile.volume(:,it_eff),torbeam_out.shotfile.pdens(:,ibeam,it_eff));
        [~,~,~,torbeam_out.shotfile.icd_int(:,ibeam,it_eff)] = interpos(torbeam_out.shotfile.volume(:,it_eff),torbeam_out.shotfile.jcd(:,ibeam,it_eff));
        torbeam_out.shotfile.icd_int(:,ibeam,it_eff) = torbeam_out.shotfile.icd_int(:,ibeam,it_eff) ./2 ./ pi ./ r0exp / 1.01; % 1.01 on average while waiting to insert proper metric
      else
        torbeam_out.shotfile.pabs_int(:,ibeam,it_eff) = nan(size(torbeam_out.shotfile.volume(:,it_eff)));
        torbeam_out.shotfile.icd_int(:,ibeam,it_eff) = nan(size(torbeam_out.shotfile.volume(:,it_eff)));
      end
      torbeam_out.shotfile.rz_r_ray(1:size(torbeam_out.t1_LIB{ibeam,it_eff},1),1:size(torbeam_out.t1_LIB{ibeam,it_eff},2)/2,ibeam,it_eff) = torbeam_out.t1_LIB{ibeam,it_eff}(:,1:2:end-1)/100.;
      torbeam_out.shotfile.rz_z_ray(1:size(torbeam_out.t1_LIB{ibeam,it_eff},1),1:size(torbeam_out.t1_LIB{ibeam,it_eff},2)/2,ibeam,it_eff) = torbeam_out.t1_LIB{ibeam,it_eff}(:,2:2:end)/100.;
      torbeam_out.shotfile.ry_r_ray(1:size(torbeam_out.t1_LIB{ibeam,it_eff},1),1:size(torbeam_out.t1_LIB{ibeam,it_eff},2)/2,ibeam,it_eff) = torbeam_out.t1tor_LIB{ibeam,it_eff}(:,1:2:end-1)/100.;
      torbeam_out.shotfile.ry_y_ray(1:size(torbeam_out.t1_LIB{ibeam,it_eff},1),1:size(torbeam_out.t1_LIB{ibeam,it_eff},2)/2,ibeam,it_eff) = torbeam_out.t1tor_LIB{ibeam,it_eff}(:,2:2:end)/100.;
      torbeam_out.shotfile.index_abs_ray(1,ibeam,it_eff) = nnn(2) + 1;
      torbeam_out.shotfile.index_abs_ray(2,ibeam,it_eff) = nnn(2) + 1 + nnn(1);
      torbeam_out.shotfile.torbeam_was_run = torbeam_out.run_torbeam;
      torbeam_out.shotfile.pabs = torbeam_out.pabs;
      torbeam_out.shotfile.icd = torbeam_out.icd;
      torbeam_out.shotfile.pabs_rhopolmax = torbeam_out.pabs_rhopolmax;
      torbeam_out.shotfile.icd_rhopolmax = torbeam_out.icd_rhopolmax;
    else
      disp(['TORBEAM did not run properly, no MW result'])
    end
  end
end
aaa=toc;
disp(['time for running all TORBEAMs: ' num2str(aaa) ' for ' num2str(icount) ' runs so ' num2str(aaa/icount) 's per TORBEAM run'])
for ibeam=find(any(torbeam_out.run_torbeam,2))'
  figure;
  subplot(2,1,1)
  plot(squeeze(torbeam_out.pdens_jcd_rho(:,ibeam,:)),squeeze(torbeam_out.pdens(:,ibeam,:)))
Olivier Sauter's avatar
Olivier Sauter committed
  title(['AUG shot #' num2str(shot) ': for beam = ' num2str(ibeam)])
  subplot(2,1,2)
  plot(squeeze(torbeam_out.pdens_jcd_rho(:,ibeam,:)),squeeze(torbeam_out.jcd(:,ibeam,:)))
  ylabel('jcd')
plot(torbeam_out.t,torbeam_out.pabs/1e6,'-')
Olivier Sauter's avatar
Olivier Sauter committed
title(['AUG shot #' num2str(shot)])

plot(torbeam_out.t,torbeam_out.icd/1e6,'-')
plot(torbeam_out.t,torbeam_out.pabs_rhopolmax,'-')
ylabel('rhopol(max Pdens)')