diff --git a/matlab/TCV_IMAS/tcv_get_ids_core_profiles.m b/matlab/TCV_IMAS/tcv_get_ids_core_profiles.m index a490cc5c799b502b9ef3b19cf77c15ab93beac23..97bf2f0bc49767a019d36c38d35c0c5cf05c0ba7 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_core_profiles.m +++ b/matlab/TCV_IMAS/tcv_get_ids_core_profiles.m @@ -1,6 +1,6 @@ -function [ids_cores_profiles,ids_cores_profiles_description,varargout] = tcv_get_ids_core_profiles(shot,ids_equil_empty, gdat_params,varargin); +function [ids_core_profiles,ids_core_profiles_description,varargout] = tcv_get_ids_core_profiles(shot,ids_equil_empty, gdat_params,varargin); % -% [ids_cores_profiles,ids_cores_profiles_description,varargout] = tcv_get_ids_cores_profiles(shot,ids_equil_empty,varargin); +% [ids_core_profiles,ids_core_profiles_description,varargout] = tcv_get_ids_core_profiles(shot,ids_equil_empty,varargin); % % % gdat_params: gdat_data.gdat_params to get all params passed from original call, in particular error_bar options @@ -21,8 +21,8 @@ machine = 'tcv'; tens_time = -1; tens_rho = -0.1; -[ids_cores_profiles, params_cores_profiles] = tcv_ids_headpart(shot,ids_equil_empty,'cores_profiles',varargin{:}); -ids_cores_profiles_description = []; +[ids_core_profiles, params_cores_profiles] = tcv_ids_headpart(shot,ids_equil_empty,'cores_profiles',varargin{:}); +ids_core_profiles_description = []; % base all from times fro nete_rho (which should be conf by default) temp_1d.ne_rho = gdat(params_cores_profiles.shot,'ne_rho','machine',machine,'fit',1); @@ -34,13 +34,20 @@ temp_1d.fit.te_rho.shot = temp_1d.te_rho.shot; temp_1d.fit.te_rho = get_grids_1d(temp_1d.fit.te_rho,1,1); temp_1d.fit.ne_rho = temp_1d.ne_rho.fit; -ids_cores_profiles.time = temp_1d.te_rho.fit.t; -ids_cores_profiles_description.time = ['.t subfield from: [''te_rho'',''subnode'',''fit.t''] thus from ' temp_1d.te_rho.fit.data_fullpath]; +if isempty(temp_1d.te_rho.fit.t) + disp('te_rho.fit') + temp_1d.te_rho.fit + warning('may need to run analysis again for profiles fitting, ask O. Sauter') + return +end + +ids_core_profiles.time = temp_1d.te_rho.fit.t; +ids_core_profiles_description.time = ['.t subfield from: [''te_rho'',''subnode'',''fit.t''] thus from ' temp_1d.te_rho.fit.data_fullpath]; % make empty cell arrays for subnodes not filled in before copying default structure to all times -ids_cores_profiles.profiles_1d{1}.ion{1}.state = {}; -ids_cores_profiles.profiles_1d{1}.neutral{1}.state = {}; -ids_cores_profiles.profiles_1d(1:length(ids_cores_profiles.time)) = ids_cores_profiles.profiles_1d(1); +ids_core_profiles.profiles_1d{1}.ion{1}.state = {}; +ids_core_profiles.profiles_1d{1}.neutral{1}.state = {}; +ids_core_profiles.profiles_1d(1:length(ids_core_profiles.time)) = ids_core_profiles.profiles_1d(1); % As a general rule, for a new substructure under the main ids, construct a local structure like: @@ -52,9 +59,9 @@ ids_cores_profiles.profiles_1d(1:length(ids_cores_profiles.time)) = ids_cores_pr vacuum_toroidal_field.b0=gdat(params_cores_profiles.shot,'b0','source','liuqe','machine',machine); % to get on liuqe time array vacuum_toroidal_field_desc.b0 = '''b0'',''source'',''liuqe'''; vacuum_toroidal_field_desc.r0 = '.r0 subfield from: [''b0'',''source'',''liuqe'']'; -ids_cores_profiles.vacuum_toroidal_field.r0 = vacuum_toroidal_field.b0.r0; -ids_cores_profiles.vacuum_toroidal_field.b0 = interpos(63,vacuum_toroidal_field.b0.t,vacuum_toroidal_field.b0.data,ids_cores_profiles.time,-1); -ids_cores_profiles_description.vacuum_toroidal_field = vacuum_toroidal_field_desc; +ids_core_profiles.vacuum_toroidal_field.r0 = vacuum_toroidal_field.b0.r0; +ids_core_profiles.vacuum_toroidal_field.b0 = interpos(63,vacuum_toroidal_field.b0.t,vacuum_toroidal_field.b0.data,ids_core_profiles.time,-1); +ids_core_profiles_description.vacuum_toroidal_field = vacuum_toroidal_field_desc; % global_quantities data into local global_quantities.* structure with correct end names and global_quantities_desc.* with description. Use temp.* and temp_desc.* structures for temporary data @@ -86,16 +93,16 @@ global_quantities_desc.energy_diamagnetic = 'w_mhd'; global_quantities.z_eff_resistive = gdat(params_cores_profiles.shot,'results.conf:z_eff','machine',machine,'fit',1); global_quantities_desc.z_eff_resistive = 'results.conf:z_eff'; -ids_cores_profiles_description.global_quantities = global_quantities_desc; +ids_core_profiles_description.global_quantities = global_quantities_desc; global_quantities_fieldnames = fieldnames(global_quantities); special_fields = {''}; % fields needing non-automatic treatments for i=1:length(global_quantities_fieldnames) if ~any(strcmp(global_quantities_fieldnames{i},special_fields)) - if ~isstruct(ids_cores_profiles.global_quantities.(global_quantities_fieldnames{i})) - ids_cores_profiles.global_quantities.(global_quantities_fieldnames{i}) = ... + if ~isstruct(ids_core_profiles.global_quantities.(global_quantities_fieldnames{i})) + ids_core_profiles.global_quantities.(global_quantities_fieldnames{i}) = ... interpos(global_quantities.(global_quantities_fieldnames{i}).t, ... - global_quantities.(global_quantities_fieldnames{i}).data,ids_cores_profiles.time,tens_time); + global_quantities.(global_quantities_fieldnames{i}).data,ids_core_profiles.time,tens_time); else special_fields{end+1} = global_quantities_fieldnames{i}; end @@ -108,77 +115,77 @@ end %% profiles_1d (cannot use eqdsk since not same radial mesh) temp_1d.area = gdat(shot,'area_rho','machine',machine); for ir=1:length(temp_1d.area.x) - area_cpt(ir,:) = interpos(temp_1d.area.t,temp_1d.area.data(ir,:),ids_cores_profiles.time,tens_time); + area_cpt(ir,:) = interpos(temp_1d.area.t,temp_1d.area.data(ir,:),ids_core_profiles.time,tens_time); end temp_1d.q = gdat(shot,'q_rho','machine',machine); for ir=1:length(temp_1d.q.x) - q_cpt(ir,:) = interpos(temp_1d.q.t,temp_1d.q.data(ir,:),ids_cores_profiles.time,tens_time); + q_cpt(ir,:) = interpos(temp_1d.q.t,temp_1d.q.data(ir,:),ids_core_profiles.time,tens_time); end -it_thom = iround_os(temp_1d.te_rho.t,ids_cores_profiles.time); -for it=1:length(ids_cores_profiles.time) - ids_cores_profiles.profiles_1d{it}.grid.rho_tor_norm = temp_1d.fit.te_rho.grids_1d.rhotornorm(:,it); - ids_cores_profiles.profiles_1d{it}.grid.rho_tor = temp_1d.fit.te_rho.grids_1d.rhotornorm(:,it) ... +it_thom = iround_os(temp_1d.te_rho.t,ids_core_profiles.time); +for it=1:length(ids_core_profiles.time) + ids_core_profiles.profiles_1d{it}.grid.rho_tor_norm = temp_1d.fit.te_rho.grids_1d.rhotornorm(:,it); + ids_core_profiles.profiles_1d{it}.grid.rho_tor = temp_1d.fit.te_rho.grids_1d.rhotornorm(:,it) ... .* temp_1d.fit.te_rho.grids_1d.rhotor_edge(it); - ids_cores_profiles.profiles_1d{it}.grid.psi = temp_1d.fit.te_rho.grids_1d.psi(:,it); - ids_cores_profiles.profiles_1d{it}.grid.volume = temp_1d.fit.te_rho.grids_1d.rhovolnorm(:,it).^2 ... + ids_core_profiles.profiles_1d{it}.grid.psi = temp_1d.fit.te_rho.grids_1d.psi(:,it); + ids_core_profiles.profiles_1d{it}.grid.volume = temp_1d.fit.te_rho.grids_1d.rhovolnorm(:,it).^2 ... .* temp_1d.fit.te_rho.grids_1d.volume_edge(it); - ids_cores_profiles.profiles_1d{it}.grid.area = interpos(temp_1d.area.x,area_cpt(:,it),temp_1d.fit.te_rho.grids_1d.rhopolnorm, ... + ids_core_profiles.profiles_1d{it}.grid.area = interpos(temp_1d.area.x,area_cpt(:,it),temp_1d.fit.te_rho.grids_1d.rhopolnorm, ... tens_rho,[1 2],[0 area_cpt(end,it)]); - ids_cores_profiles.profiles_1d{it}.time = ids_cores_profiles.time(it); - ids_cores_profiles.profiles_1d{it}.electrons.temperature = temp_1d.fit.te_rho.data(:,it); - ids_cores_profiles.profiles_1d{it}.electrons.temperature_fit.measured = temp_1d.te_rho.data(:,it_thom(it)); - ids_cores_profiles.profiles_1d{it}.electrons.temperature_fit.time_measurement = temp_1d.te_rho.t(it_thom(it)); - ids_cores_profiles.profiles_1d{it}.electrons.temperature_fit.rho_tor_norm = temp_1d.te_rho.grids_1d.rhotornorm(:,it_thom(it)); - ids_cores_profiles.profiles_1d{it}.electrons.temperature_fit.source = {'Thomson, interpos fit'}; - ids_cores_profiles.profiles_1d{it}.electrons.density = temp_1d.fit.ne_rho.data(:,it); - ids_cores_profiles.profiles_1d{it}.electrons.density_thermal = ids_cores_profiles.profiles_1d{it}.electrons.density; - ids_cores_profiles.profiles_1d{it}.electrons.density_fit.measured = temp_1d.ne_rho.data(:,it_thom(it)); - ids_cores_profiles.profiles_1d{it}.electrons.density_fit.time_measurement = temp_1d.ne_rho.t(it_thom(it)); - ids_cores_profiles.profiles_1d{it}.electrons.density_fit.rho_tor_norm = temp_1d.ne_rho.grids_1d.rhotornorm(:,it_thom(it)); - ids_cores_profiles.profiles_1d{it}.electrons.density_fit.source = {'Thomson, interpos fit'}; - ids_cores_profiles.profiles_1d{it}.electrons.pressure_thermal = 1.6022e-19.*ids_cores_profiles.profiles_1d{it}.electrons.density_thermal ... - .* ids_cores_profiles.profiles_1d{it}.electrons.temperature; - ids_cores_profiles.profiles_1d{it}.zeff = global_quantities.z_eff_resistive.data(it) .* ... - ones(size(ids_cores_profiles.profiles_1d{it}.electrons.density)); + ids_core_profiles.profiles_1d{it}.time = ids_core_profiles.time(it); + ids_core_profiles.profiles_1d{it}.electrons.temperature = temp_1d.fit.te_rho.data(:,it); + ids_core_profiles.profiles_1d{it}.electrons.temperature_fit.measured = temp_1d.te_rho.data(:,it_thom(it)); + ids_core_profiles.profiles_1d{it}.electrons.temperature_fit.time_measurement = temp_1d.te_rho.t(it_thom(it)); + ids_core_profiles.profiles_1d{it}.electrons.temperature_fit.rho_tor_norm = temp_1d.te_rho.grids_1d.rhotornorm(:,it_thom(it)); + ids_core_profiles.profiles_1d{it}.electrons.temperature_fit.source = {'Thomson, interpos fit'}; + ids_core_profiles.profiles_1d{it}.electrons.density = temp_1d.fit.ne_rho.data(:,it); + ids_core_profiles.profiles_1d{it}.electrons.density_thermal = ids_core_profiles.profiles_1d{it}.electrons.density; + ids_core_profiles.profiles_1d{it}.electrons.density_fit.measured = temp_1d.ne_rho.data(:,it_thom(it)); + ids_core_profiles.profiles_1d{it}.electrons.density_fit.time_measurement = temp_1d.ne_rho.t(it_thom(it)); + ids_core_profiles.profiles_1d{it}.electrons.density_fit.rho_tor_norm = temp_1d.ne_rho.grids_1d.rhotornorm(:,it_thom(it)); + ids_core_profiles.profiles_1d{it}.electrons.density_fit.source = {'Thomson, interpos fit'}; + ids_core_profiles.profiles_1d{it}.electrons.pressure_thermal = 1.6022e-19.*ids_core_profiles.profiles_1d{it}.electrons.density_thermal ... + .* ids_core_profiles.profiles_1d{it}.electrons.temperature; + ids_core_profiles.profiles_1d{it}.zeff = global_quantities.z_eff_resistive.data(it) .* ... + ones(size(ids_core_profiles.profiles_1d{it}.electrons.density)); end zeff_error = 0.5; switch error_bar case 'delta' - for it=1:length(ids_cores_profiles.time) - ids_cores_profiles.profiles_1d{it}.electrons.temperature_fit.measured_error_upper = temp_1d.te_rho.error_bar(:,it_thom(it)); - ids_cores_profiles.profiles_1d{it}.electrons.density_fit.measured_error_upper = temp_1d.ne_rho.error_bar(:,it_thom(it)); - ids_cores_profiles.profiles_1d{it}.zeff_error_upper = zeff_error .* ones(size(ids_cores_profiles.profiles_1d{it}.zeff)); + for it=1:length(ids_core_profiles.time) + ids_core_profiles.profiles_1d{it}.electrons.temperature_fit.measured_error_upper = temp_1d.te_rho.error_bar(:,it_thom(it)); + ids_core_profiles.profiles_1d{it}.electrons.density_fit.measured_error_upper = temp_1d.ne_rho.error_bar(:,it_thom(it)); + ids_core_profiles.profiles_1d{it}.zeff_error_upper = zeff_error .* ones(size(ids_core_profiles.profiles_1d{it}.zeff)); end case 'delta_with_lower' - for it=1:length(ids_cores_profiles.time) - ids_cores_profiles.profiles_1d{it}.electrons.temperature_fit.measured_error_upper = temp_1d.te_rho.error_bar(:,it_thom(it)); - ids_cores_profiles.profiles_1d{it}.electrons.temperature_fit.measured_error_lower = ... - ids_cores_profiles.profiles_1d{it}.electrons.temperature_fit.measured_error_upper; - ids_cores_profiles.profiles_1d{it}.electrons.density_fit.measured_error_upper = temp_1d.ne_rho.error_bar(:,it_thom(it)); - ids_cores_profiles.profiles_1d{it}.electrons.density_fit.measured_error_lower = ... - ids_cores_profiles.profiles_1d{it}.electrons.density_fit.measured_error_upper; - ids_cores_profiles.profiles_1d{it}.zeff_error_upper = zeff_error .* ones(size(ids_cores_profiles.profiles_1d{it}.zeff)); - ids_cores_profiles.profiles_1d{it}.zeff_error_lower = ids_cores_profiles.profiles_1d{it}.zeff_error_upper; + for it=1:length(ids_core_profiles.time) + ids_core_profiles.profiles_1d{it}.electrons.temperature_fit.measured_error_upper = temp_1d.te_rho.error_bar(:,it_thom(it)); + ids_core_profiles.profiles_1d{it}.electrons.temperature_fit.measured_error_lower = ... + ids_core_profiles.profiles_1d{it}.electrons.temperature_fit.measured_error_upper; + ids_core_profiles.profiles_1d{it}.electrons.density_fit.measured_error_upper = temp_1d.ne_rho.error_bar(:,it_thom(it)); + ids_core_profiles.profiles_1d{it}.electrons.density_fit.measured_error_lower = ... + ids_core_profiles.profiles_1d{it}.electrons.density_fit.measured_error_upper; + ids_core_profiles.profiles_1d{it}.zeff_error_upper = zeff_error .* ones(size(ids_core_profiles.profiles_1d{it}.zeff)); + ids_core_profiles.profiles_1d{it}.zeff_error_lower = ids_core_profiles.profiles_1d{it}.zeff_error_upper; end case 'added' - for it=1:length(ids_cores_profiles.time) - ids_cores_profiles.profiles_1d{it}.electrons.temperature_fit.measured_error_upper = ... - ids_cores_profiles.profiles_1d{it}.electrons.temperature_fit.measured ... + for it=1:length(ids_core_profiles.time) + ids_core_profiles.profiles_1d{it}.electrons.temperature_fit.measured_error_upper = ... + ids_core_profiles.profiles_1d{it}.electrons.temperature_fit.measured ... + temp_1d.te_rho.error_bar(:,it_thom(it)); - ids_cores_profiles.profiles_1d{it}.electrons.temperature_fit.measured_error_lower = ... - ids_cores_profiles.profiles_1d{it}.electrons.temperature_fit.measured ... + ids_core_profiles.profiles_1d{it}.electrons.temperature_fit.measured_error_lower = ... + ids_core_profiles.profiles_1d{it}.electrons.temperature_fit.measured ... - temp_1d.te_rho.error_bar(:,it_thom(it)); - ids_cores_profiles.profiles_1d{it}.electrons.density_fit.measured_error_upper = ... - ids_cores_profiles.profiles_1d{it}.electrons.density_fit.measured ... + ids_core_profiles.profiles_1d{it}.electrons.density_fit.measured_error_upper = ... + ids_core_profiles.profiles_1d{it}.electrons.density_fit.measured ... + temp_1d.te_rho.error_bar(:,it_thom(it)); - ids_cores_profiles.profiles_1d{it}.electrons.density_fit.measured_error_lower = ... - ids_cores_profiles.profiles_1d{it}.electrons.density_fit.measured ... + ids_core_profiles.profiles_1d{it}.electrons.density_fit.measured_error_lower = ... + ids_core_profiles.profiles_1d{it}.electrons.density_fit.measured ... - temp_1d.te_rho.error_bar(:,it_thom(it)); - ids_cores_profiles.profiles_1d{it}.zeff_error_upper = min(6,ids_cores_profiles.profiles_1d{it}.zeff ... - + zeff_error .* ones(size(ids_cores_profiles.profiles_1d{it}.zeff))); - ids_cores_profiles.profiles_1d{it}.zeff_error_upper = max(1,ids_cores_profiles.profiles_1d{it}.zeff ... - - zeff_error .* ones(size(ids_cores_profiles.profiles_1d{it}.zeff))); + ids_core_profiles.profiles_1d{it}.zeff_error_upper = min(6,ids_core_profiles.profiles_1d{it}.zeff ... + + zeff_error .* ones(size(ids_core_profiles.profiles_1d{it}.zeff))); + ids_core_profiles.profiles_1d{it}.zeff_error_upper = max(1,ids_core_profiles.profiles_1d{it}.zeff ... + - zeff_error .* ones(size(ids_core_profiles.profiles_1d{it}.zeff))); end otherwise error(['tcv_ids_bpol_loop: error_bar option not known: ' error_bar]) @@ -202,81 +209,86 @@ temp_1d.ti.fit = temp_1d.ti_conf_rho; temp_1d.ti.fit =get_grids_1d(temp_1d.ti.fit,1,1); temp_1d.ni.fit = temp_1d.ni_conf_rho; temp_1d.ni.fit =get_grids_1d(temp_1d.ni.fit,1,1); -it_ti = iround_os(temp_1d.ti.fit.t,ids_cores_profiles.time); +it_ti = iround_os(temp_1d.ti.fit.t,ids_core_profiles.time); % assumed 1 impurity with Zp=6 Zp = 6.; -for it=1:length(ids_cores_profiles.time) - ids_cores_profiles.profiles_1d{it}.ion{1}.element{1}.a = 2.; - ids_cores_profiles.profiles_1d{it}.ion{1}.element{1}.z_n = 1; - ids_cores_profiles.profiles_1d{it}.ion{1}.element{1}.atoms_n = 1; - ids_cores_profiles.profiles_1d{it}.ion{1}.element{1}.z_ion = 1; - ids_cores_profiles.profiles_1d{it}.ion{1}.element{1}.label = 'D+'; - ids_cores_profiles.profiles_1d{it}.ion{1}.multiple_states_flag = 0; - ids_cores_profiles.profiles_1d{it}.ion{1}.temperature = temp_1d.ti.fit.data(:,it_ti(it)); - ids_cores_profiles.profiles_1d{it}.ion{1}.density = (temp_1d.ni.fit.data(:,it_ti(it)).*Zp-ids_cores_profiles.profiles_1d{it}.electrons.density)./(Zp-1.); - ids_cores_profiles.profiles_1d{it}.ion{1}.density_thermal = ids_cores_profiles.profiles_1d{it}.ion{1}.density; - ids_cores_profiles.profiles_1d{it}.ion{1}.pressure_thermal = 1.6022e-19.*ids_cores_profiles.profiles_1d{it}.ion{1}.density_thermal ... - .* ids_cores_profiles.profiles_1d{it}.ion{1}.temperature; +for it=1:length(ids_core_profiles.time) + ids_core_profiles.profiles_1d{it}.ion{1}.element{1}.a = 2.; + ids_core_profiles.profiles_1d{it}.ion{1}.element{1}.z_n = 1; + ids_core_profiles.profiles_1d{it}.ion{1}.element{1}.atoms_n = 1; + ids_core_profiles.profiles_1d{it}.ion{1}.element{1}.z_ion = 1; + ids_core_profiles.profiles_1d{it}.ion{1}.element{1}.label = 'D+'; + ids_core_profiles.profiles_1d{it}.ion{1}.multiple_states_flag = 0; + ids_core_profiles.profiles_1d{it}.ion{1}.temperature = temp_1d.ti.fit.data(:,it_ti(it)); + ids_core_profiles.profiles_1d{it}.ion{1}.density = (temp_1d.ni.fit.data(:,it_ti(it)).*Zp-ids_core_profiles.profiles_1d{it}.electrons.density)./(Zp-1.); + ids_core_profiles.profiles_1d{it}.ion{1}.density_thermal = ids_core_profiles.profiles_1d{it}.ion{1}.density; + ids_core_profiles.profiles_1d{it}.ion{1}.pressure_thermal = 1.6022e-19.*ids_core_profiles.profiles_1d{it}.ion{1}.density_thermal ... + .* ids_core_profiles.profiles_1d{it}.ion{1}.temperature; % - ids_cores_profiles.profiles_1d{it}.t_i_average = ids_cores_profiles.profiles_1d{it}.ion{1}.temperature; - ids_cores_profiles.profiles_1d{it}.n_i_thermal_total = ids_cores_profiles.profiles_1d{it}.ion{1}.density_thermal; - ids_cores_profiles.profiles_1d{it}.pressure_ion_total = 1.6022e-19 .* ids_cores_profiles.profiles_1d{it}.n_i_thermal_total ... - .* ids_cores_profiles.profiles_1d{it}.t_i_average; - ids_cores_profiles.profiles_1d{it}.pressure_thermal = ids_cores_profiles.profiles_1d{it}.pressure_ion_total ... - + ids_cores_profiles.profiles_1d{it}.electrons.pressure_thermal; + ids_core_profiles.profiles_1d{it}.t_i_average = ids_core_profiles.profiles_1d{it}.ion{1}.temperature; + ids_core_profiles.profiles_1d{it}.n_i_thermal_total = ids_core_profiles.profiles_1d{it}.ion{1}.density_thermal; + ids_core_profiles.profiles_1d{it}.pressure_ion_total = 1.6022e-19 .* ids_core_profiles.profiles_1d{it}.n_i_thermal_total ... + .* ids_core_profiles.profiles_1d{it}.t_i_average; + ids_core_profiles.profiles_1d{it}.pressure_thermal = ids_core_profiles.profiles_1d{it}.pressure_ion_total ... + + ids_core_profiles.profiles_1d{it}.electrons.pressure_thermal; % % C from zeff and above Ti at this stage, should take from cxrs if available but then add something for Zeff matching above % - ids_cores_profiles.profiles_1d{it}.ion{2}.element{1}.a = 12.; - ids_cores_profiles.profiles_1d{it}.ion{2}.element{1}.z_n = 6.; - ids_cores_profiles.profiles_1d{it}.ion{2}.element{1}.atoms_n = 1.; - ids_cores_profiles.profiles_1d{it}.ion{2}.element{1}.z_ion = 6.; - ids_cores_profiles.profiles_1d{it}.ion{2}.element{1}.label = 'C6+'; - ids_cores_profiles.profiles_1d{it}.ion{2}.multiple_states_flag = 0; - ids_cores_profiles.profiles_1d{it}.ion{2}.temperature = ids_cores_profiles.profiles_1d{it}.ion{1}.temperature; - ids_cores_profiles.profiles_1d{it}.ion{2}.density = (ids_cores_profiles.profiles_1d{it}.electrons.density - ids_cores_profiles.profiles_1d{it}.ion{1}.density) ./ ids_cores_profiles.profiles_1d{it}.ion{2}.element{1}.z_ion; - ids_cores_profiles.profiles_1d{it}.ion{2}.density_thermal = ids_cores_profiles.profiles_1d{it}.ion{2}.density; - ids_cores_profiles.profiles_1d{it}.ion{2}.pressure_thermal = 1.6022e-19.*ids_cores_profiles.profiles_1d{it}.ion{2}.density_thermal ... - .* ids_cores_profiles.profiles_1d{it}.ion{2}.temperature; + ids_core_profiles.profiles_1d{it}.ion{2}.element{1}.a = 12.; + ids_core_profiles.profiles_1d{it}.ion{2}.element{1}.z_n = 6.; + ids_core_profiles.profiles_1d{it}.ion{2}.element{1}.atoms_n = 1.; + ids_core_profiles.profiles_1d{it}.ion{2}.element{1}.z_ion = 6.; + ids_core_profiles.profiles_1d{it}.ion{2}.element{1}.label = 'C6+'; + ids_core_profiles.profiles_1d{it}.ion{2}.multiple_states_flag = 0; + ids_core_profiles.profiles_1d{it}.ion{2}.temperature = ids_core_profiles.profiles_1d{it}.ion{1}.temperature; + ids_core_profiles.profiles_1d{it}.ion{2}.density = (ids_core_profiles.profiles_1d{it}.electrons.density - ids_core_profiles.profiles_1d{it}.ion{1}.density) ./ ids_core_profiles.profiles_1d{it}.ion{2}.element{1}.z_ion; + ids_core_profiles.profiles_1d{it}.ion{2}.density_thermal = ids_core_profiles.profiles_1d{it}.ion{2}.density; + ids_core_profiles.profiles_1d{it}.ion{2}.pressure_thermal = 1.6022e-19.*ids_core_profiles.profiles_1d{it}.ion{2}.density_thermal ... + .* ids_core_profiles.profiles_1d{it}.ion{2}.temperature; % average/sums - ids_cores_profiles.profiles_1d{it}.t_i_average = ids_cores_profiles.profiles_1d{it}.ion{1}.temperature; - ids_cores_profiles.profiles_1d{it}.n_i_thermal_total = ids_cores_profiles.profiles_1d{it}.ion{1}.density_thermal + ... - ids_cores_profiles.profiles_1d{it}.ion{2}.density_thermal; - ids_cores_profiles.profiles_1d{it}.pressure_ion_total = 1.6022e-19 .* ids_cores_profiles.profiles_1d{it}.n_i_thermal_total ... - .* ids_cores_profiles.profiles_1d{it}.t_i_average; - ids_cores_profiles.profiles_1d{it}.pressure_thermal = ids_cores_profiles.profiles_1d{it}.pressure_ion_total ... - + ids_cores_profiles.profiles_1d{it}.electrons.pressure_thermal; + ids_core_profiles.profiles_1d{it}.t_i_average = ids_core_profiles.profiles_1d{it}.ion{1}.temperature; + ids_core_profiles.profiles_1d{it}.n_i_thermal_total = ids_core_profiles.profiles_1d{it}.ion{1}.density_thermal + ... + ids_core_profiles.profiles_1d{it}.ion{2}.density_thermal; + ids_core_profiles.profiles_1d{it}.pressure_ion_total = 1.6022e-19 .* ids_core_profiles.profiles_1d{it}.n_i_thermal_total ... + .* ids_core_profiles.profiles_1d{it}.t_i_average; + ids_core_profiles.profiles_1d{it}.pressure_thermal = ids_core_profiles.profiles_1d{it}.pressure_ion_total ... + + ids_core_profiles.profiles_1d{it}.electrons.pressure_thermal; end if ~isempty(temp_1d.cxrs_rho.ti.fit.data) - it_raw = iround_os(temp_1d.ti.raw.t,ids_cores_profiles.time); - for it=1:length(ids_cores_profiles.time) - % ids_cores_profiles.profiles_1d{it}.ion{1}.temperature_fit = temp_1d.ti.fit(:,it_ti(it)); - ids_cores_profiles.profiles_1d{it}.ion{1}.density_fit.source = {'from Zeff and ne profile'}; - ids_cores_profiles.profiles_1d{it}.t_i_average_fit.measured = temp_1d.ti.raw.data(:,it_raw(it)); - ids_cores_profiles.profiles_1d{it}.t_i_average_fit.source = {'from CXRS on C usually'}; + it_raw = iround_os(temp_1d.ti.raw.t,ids_core_profiles.time); + for it=1:length(ids_core_profiles.time) + % ids_core_profiles.profiles_1d{it}.ion{1}.temperature_fit = temp_1d.ti.fit(:,it_ti(it)); + ids_core_profiles.profiles_1d{it}.ion{1}.density_fit.source = {'from Zeff and ne profile'}; + ids_core_profiles.profiles_1d{it}.t_i_average_fit.measured = temp_1d.ti.raw.data(:,it_raw(it)); + ids_core_profiles.profiles_1d{it}.t_i_average_fit.source = {'from CXRS on C usually'}; end end temp_1d.q = gdat(shot,'q_rho','machine',machine); for ir=1:length(temp_1d.q.x) - q_cpt(ir,:) = interpos(temp_1d.q.t,temp_1d.q.data(ir,:),ids_cores_profiles.time,tens_time); + q_cpt(ir,:) = interpos(temp_1d.q.t,temp_1d.q.data(ir,:),ids_core_profiles.time,tens_time); end -for it=1:length(ids_cores_profiles.time) - [ids_cores_profiles.profiles_1d{it}.q] = interpos(temp_1d.q.x,q_cpt(:,it),temp_1d.fit.te_rho.grids_1d.rhopolnorm, ... +for it=1:length(ids_core_profiles.time) + [ids_core_profiles.profiles_1d{it}.q] = interpos(temp_1d.q.x,q_cpt(:,it),temp_1d.fit.te_rho.grids_1d.rhopolnorm, ... tens_rho,[1 0],[0 0]); - [qfit,dqdrhotor] = interpos(ids_cores_profiles.profiles_1d{it}.grid.rho_tor,ids_cores_profiles.profiles_1d{it}.q,tens_rho,[1 0],[0 0]); - ids_cores_profiles.profiles_1d{it}.shear = ids_cores_profiles.profiles_1d{it}.grid.rho_tor./ids_cores_profiles.profiles_1d{it}.q ... + [qfit,dqdrhotor] = interpos(ids_core_profiles.profiles_1d{it}.grid.rho_tor,ids_core_profiles.profiles_1d{it}.q,tens_rho,[1 0],[0 0]); + ids_core_profiles.profiles_1d{it}.magnetic_shear = ids_core_profiles.profiles_1d{it}.grid.rho_tor./ids_core_profiles.profiles_1d{it}.q ... .* dqdrhotor; end if nargin <= 2 - ids_cores_profiles.code.name = ['tcv_get_ids_core_profiles, within gdat, with shot= ' num2str(shot) ]; + ids_core_profiles.code.name = ['tcv_get_ids_core_profiles, within gdat, with shot= ' num2str(shot) ]; else - ids_cores_profiles.code.name = ['tcv_get_ids_core_profiles, within gdat, with shot= ' num2str(shot) '; varargin: ' varargin{:}]; + ids_core_profiles.code.name = ['tcv_get_ids_core_profiles, within gdat, with shot= ' num2str(shot) '; varargin: ' varargin{:}]; end -ids_cores_profiles.code.output_flag = zeros(size(ids_cores_profiles.time)); +ids_core_profiles.code.output_flag = zeros(size(ids_core_profiles.time)); % make arrays not filled in empty: -for it=1:length(ids_cores_profiles.time) - ids_cores_profiles.profiles_1d{it}.neutral = {}; +for it=1:length(ids_core_profiles.time) + ids_core_profiles.profiles_1d{it}.neutral = {}; end + +% cocos automatic transform +cocos_in=17; +cocos_out=11; +[ids_core_profiles,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_core_profiles,'core_profiles',cocos_in,cocos_out); diff --git a/matlab/TCV_IMAS/tcv_get_ids_ec_antennas.m b/matlab/TCV_IMAS/tcv_get_ids_ec_antennas.m index d7ace2cdcf8e0255a645cb8209ae453574145331..a9fde774e11d3586e0b0c054e99af1f42dda89f9 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_ec_antennas.m +++ b/matlab/TCV_IMAS/tcv_get_ids_ec_antennas.m @@ -74,3 +74,8 @@ for iant=1:nb_antennas end end end + +% cocos automatic transform +cocos_in=17; +cocos_out=11; +[ids_ec_antennas,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_ec_antennas,'ec_antennas',cocos_in,cocos_out); diff --git a/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m b/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m index c864b2d54e725b483fc12989471f642a3fe34060..1a129def4147d91a79db7fd928d5ad79e3fd5ee7 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m +++ b/matlab/TCV_IMAS/tcv_get_ids_equilibrium.m @@ -372,3 +372,8 @@ for it=1:numel(ids_equilibrium.time_slice) ids_equilibrium.time_slice{it}.constraints.q = {}; ids_equilibrium.time_slice{it}.constraints.x_point = {}; end + +% cocos automatic transform +cocos_in=17; +cocos_out=11; +[ids_equilibrium,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_equilibrium,'equilibrium',cocos_in,cocos_out); diff --git a/matlab/TCV_IMAS/tcv_get_ids_magnetics.m b/matlab/TCV_IMAS/tcv_get_ids_magnetics.m index 86449e0e1efb992e144eb4334efa5124179a9f25..202b3540b1cfcf4590ead8968c6d5f4d8e8e1bf9 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_magnetics.m +++ b/matlab/TCV_IMAS/tcv_get_ids_magnetics.m @@ -13,3 +13,7 @@ function [ids_magnetics,ids_magnetics_description,varargout] = tcv_get_ids_magne % make arrays not filled in empty: not the case for magnetics +% cocos automatic transform +cocos_in=17; +cocos_out=11; +[ids_magnetics,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_magnetics,'magnetics',cocos_in,cocos_out); diff --git a/matlab/TCV_IMAS/tcv_get_ids_nbi.m b/matlab/TCV_IMAS/tcv_get_ids_nbi.m index 4c627bd1396f4dfdd43a58f28ea6c70d4e1e284f..efbd0c7f17b8478f2566b86bd34e3857f2338f27 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_nbi.m +++ b/matlab/TCV_IMAS/tcv_get_ids_nbi.m @@ -114,3 +114,10 @@ for iunit=1:nb_units % M. Vallar thinks it is useless now end + + +% cocos automatic transform +cocos_in=17; +cocos_out=11; +[ids_nbi2,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_nbi,'nbi',cocos_in,cocos_out); + diff --git a/matlab/TCV_IMAS/tcv_get_ids_pf_active.m b/matlab/TCV_IMAS/tcv_get_ids_pf_active.m index 045275b21f994de06def353ea089fb05013e85c1..1d3fa00d8c50dd505360c1449ed2f9c75e3b83c3 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_pf_active.m +++ b/matlab/TCV_IMAS/tcv_get_ids_pf_active.m @@ -14,3 +14,7 @@ function [ids_pf_active,ids_pf_active_description,varargout] = tcv_get_ids_pf_ac % make arrays not filled in empty: not the case for magnetics ids_pf_active.vertical_force = {}; +% cocos automatic transform +cocos_in=17; +cocos_out=11; +[ids_pf_active,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_pf_active,'pf_active',cocos_in,cocos_out); diff --git a/matlab/TCV_IMAS/tcv_get_ids_tf.m b/matlab/TCV_IMAS/tcv_get_ids_tf.m index d0985503b3c8d59f7155274230b3d9775e143e32..9f281b6e0e17dae8578700be653489d98a94b4af 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_tf.m +++ b/matlab/TCV_IMAS/tcv_get_ids_tf.m @@ -28,3 +28,9 @@ end % make arrays not filled in empty: not the case for magnetics ids_tf_out.coil = {}; ids_tf_out.field_map = {}; + +% cocos automatic transform +cocos_in=17; +cocos_out=11; +[ids_tf_out,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_tf_out,'tf',cocos_in,cocos_out); + diff --git a/matlab/TCV_IMAS/tcv_get_ids_wall.m b/matlab/TCV_IMAS/tcv_get_ids_wall.m index ee21b9b5b09d5cf8558f894ba5f825677ef22751..069dbf02065f9c6ddd0cae2f2e3ca9005e300227 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_wall.m +++ b/matlab/TCV_IMAS/tcv_get_ids_wall.m @@ -18,3 +18,9 @@ ids_wall.description_2d{1}.mobile.unit = {}; %% TODO ids_description = []; + +% cocos automatic transform +cocos_in=17; +cocos_out=11; +% normally nothing to do +[ids_wall,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_wall,'wall',cocos_in,cocos_out);