Skip to content
Snippets Groups Projects
Commit 846a0afc authored by Antoine Merle's avatar Antoine Merle
Browse files

Fix pf_active: LIUQE error is 200A for each circuit

Also fixes when MATLAB linter was complaining.
parent aeadcdff
Branches
Tags
1 merge request!39Set same error_bars as LIUQE weights for eqreconstruct IDSs
...@@ -4,7 +4,7 @@ function [ids_pf_active,ids_pf_active_description,varargout] = tcv_get_ids_pf_ac ...@@ -4,7 +4,7 @@ function [ids_pf_active,ids_pf_active_description,varargout] = tcv_get_ids_pf_ac
% %
% Input pharser % Input pharser
if exist('gdat_params') if exist('gdat_params','var')
[ids_pf_active, params] = tcv_ids_headpart(shot, ids_pf_active_empty,'pf_active','homogeneous_time',0,'gdat_params',gdat_params,varargin{:}); [ids_pf_active, params] = tcv_ids_headpart(shot, ids_pf_active_empty,'pf_active','homogeneous_time',0,'gdat_params',gdat_params,varargin{:});
else else
[ids_pf_active, params] = tcv_ids_headpart(shot, ids_pf_active_empty,'pf_active','homogeneous_time',0,varargin{:}); [ids_pf_active, params] = tcv_ids_headpart(shot, ids_pf_active_empty,'pf_active','homogeneous_time',0,varargin{:});
...@@ -21,7 +21,7 @@ end ...@@ -21,7 +21,7 @@ end
ids_pf_active.vertical_force = {}; ids_pf_active.vertical_force = {};
% cocos automatic transform % cocos automatic transform
if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2 if exist('ids_generic_cocos_nodes_transformation_symbolic','file')
[ids_pf_active,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_pf_active,'pf_active',gdat_params.cocos_in, ... [ids_pf_active,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_pf_active,'pf_active',gdat_params.cocos_in, ...
gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in, ... gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in, ...
gdat_params.error_bar,gdat_params.nverbose); gdat_params.error_bar,gdat_params.nverbose);
......
...@@ -13,11 +13,11 @@ function [ids_struct_out,ids_struct_out_description] = tcv_ids_coil(shot, ids_s ...@@ -13,11 +13,11 @@ function [ids_struct_out,ids_struct_out_description] = tcv_ids_coil(shot, ids_s
% TODO add logic to get the current in the coils only once. % TODO add logic to get the current in the coils only once.
error_bar = 'delta'; error_bar = 'delta';
if exist('gdat_params') && isfield(gdat_params,'error_bar') && ~isempty(gdat_params.error_bar) if exist('gdat_params','var') && isfield(gdat_params,'error_bar') && ~isempty(gdat_params.error_bar)
error_bar = gdat_params.error_bar; error_bar = gdat_params.error_bar;
end end
params_eff_ref = gdat_params; params_eff_ref.doplot=0; params_eff_ref = gdat_params; params_eff_ref.doplot=0;
try;params_eff_ref=rmfield(params_eff_ref,'source');catch;end % make sure no source (from ids def) try params_eff_ref=rmfield(params_eff_ref,'source');catch;end % make sure no source (from ids def)
% Coils that can be characterized by R, Z and a % Coils that can be characterized by R, Z and a
% crosssectional area are described as distinct coils with a single element, this also corresponds to coils with distinct TCV names). % crosssectional area are described as distinct coils with a single element, this also corresponds to coils with distinct TCV names).
...@@ -44,117 +44,118 @@ r_c = mdsvalue('_r_c=static(''r_c'')'); % R position ...@@ -44,117 +44,118 @@ r_c = mdsvalue('_r_c=static(''r_c'')'); % R position
z_c = mdsvalue('_z_c=static(''z_c'')'); % Z position z_c = mdsvalue('_z_c=static(''z_c'')'); % Z position
w_c = mdsvalue('static(''w_c'')'); % width rectangular description w_c = mdsvalue('static(''w_c'')'); % width rectangular description
h_c = mdsvalue('static(''h_c'')'); % height rectangular description h_c = mdsvalue('static(''h_c'')'); % height rectangular description
a_c = mdsvalue('static(''a_c'')'); % tilt angle for parallelogram representation ( deprecated representation in IDS) % a_c = mdsvalue('static(''a_c'')'); % tilt angle for parallelogram representation ( deprecated representation in IDS)
nt_c = mdsvalue('static(''nt_c'')'); % number of turns nt_c = mdsvalue('static(''nt_c'')'); % number of turns
xsect_c = mdsvalue('static(''xsect_c'')'); xsect_c = mdsvalue('static(''xsect_c'')');
res_c = mdsvalue('static(''res_c'')'); % resistence of the coil res_c = mdsvalue('static(''res_c'')'); % resistence of the coil
sizepfc = numel(r_c); sizepfc = numel(r_c);
namepfc = mdsvalue('dim_of(_r_c)'); namepfc = mdsvalue('static(''dim_c'')');
% Set effective turns in T1 and T2 (see J.-M. Moret, et al., RSI 69 (1998) 2333) % Set effective turns in T1 and T2 (see J.-M. Moret, et al., RSI 69 (1998) 2333)
iT = strmatch('T_001',namepfc); iT = strcmp('T_001',namepfc);
nt_c(iT)=26/68; nt_c(iT)=26/68;
iT = strmatch('T_002',namepfc); iT = strcmp('T_002',namepfc);
nt_c(iT)=42/68; nt_c(iT)=42/68;
iT = strmatch('T_003',namepfc); % Return current iT = strcmp('T_003',namepfc); % Return current
nt_c(iT)=1; nt_c(iT)=1;
% Approximate circular G-coil conductor with a square of the same crosssection % Approximate circular G-coil conductor with a square of the same crosssection
iG=strmatch('G_00',namepfc); iG=strcmp('G_00',namepfc);
w_c(iG)=sqrt(xsect_c(iG)); w_c(iG)=sqrt(xsect_c(iG));
h_c(iG)=sqrt(xsect_c(iG)); h_c(iG)=sqrt(xsect_c(iG));
%% Put data to ids structure %% Put data to ids structure
ids_struct_out(1:sizepfc) = ids_structures; ids_struct_out(1:sizepfc) = ids_structures;
ids_struct_out_description = cell(1,sizepfc);
ind_coil_ids = 0; ind_coil_ids = 0;
params_eff = params_eff_ref; params_eff = params_eff_ref;
for ii=1:ncircuits2ids for ii=1:ncircuits2ids
ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit
for jj = 1:ncoil2ids for jj = 1:ncoil2ids
ind_coil_ids = ind_coil_ids +1; ind_coil_ids = ind_coil_ids +1;
ids_struct_out{ind_coil_ids}.name = coil_names2ids{ii}{jj}; ids_struct_out{ind_coil_ids}.name = coil_names2ids{ii}{jj};
ids_struct_out_description{ind_coil_ids}.name = ['through aa=tcv_ids_pf_active_definition from aa.coil_names ']; ids_struct_out_description{ind_coil_ids}.name = 'through aa=tcv_ids_pf_active_definition from aa.coil_names ';
% time-varying data % time-varying data
if shot == -1 if shot == -1
tmpdata.dim{1} = []; tmpdata.dim{1} = [];
tmpdata.data = []; tmpdata.data = [];
warning('no time data loaded for shot %d',shot); warning('no time data loaded for shot %d',shot);
else else
params_eff.data_request = mds_paths2ids{ii}; params_eff.data_request = mds_paths2ids{ii};
tmpdata = gdat_tcv(shot,params_eff); tmpdata = gdat_tcv(shot,params_eff);
end end
% $$$ ids_struct_out{ind_coil_ids}.current.data = tmpdata.data; % $$$ ids_struct_out{ind_coil_ids}.current.data = tmpdata.data;
% $$$ ids_struct_out_description{ind_coil_ids}.current.data = ['from ' mds_paths2ids{ii}]; % $$$ ids_struct_out_description{ind_coil_ids}.current.data = ['from ' mds_paths2ids{ii}];
ids_struct_out{ind_coil_ids}.current.data = pf_def.coil_current_signs{ii}(jj) .* tmpdata.data; ids_struct_out{ind_coil_ids}.current.data = pf_def.coil_current_signs{ii}(jj) .* tmpdata.data;
ids_struct_out_description{ind_coil_ids}.current.data = ['from ' num2str(pf_def.coil_current_signs{ii}(jj)) ' * ' mds_paths2ids{ii}]; ids_struct_out_description{ind_coil_ids}.current.data = ['from ' num2str(pf_def.coil_current_signs{ii}(jj)) ' * ' mds_paths2ids{ii}];
try try
ids_struct_out{ind_coil_ids}.current.time = tmpdata.dim{1}; ids_struct_out{ind_coil_ids}.current.time = tmpdata.dim{1};
catch catch
keyboard keyboard
end
% Find index on static tree
tmpind = find(strcmp(ids_struct_out{ind_coil_ids}.name, namepfc));
ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.r = r_c(tmpind);
ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_r = ['from static(''r_c'')'];
ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.z = z_c(tmpind);
ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_z = ['from static(''z_c'')'];
ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.width = w_c(tmpind);
ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_width = ['from static(''w_c'')'];
ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.height = h_c(tmpind);
ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_height = ['from static(''h_c'')'];
ids_struct_out{ind_coil_ids}.element{1}.turns_with_sign = nt_c(tmpind);
ids_struct_out_description{ind_coil_ids}.element{1}.turns_with_sign = ['from static(''nt_c'')'];
ids_struct_out{ind_coil_ids}.element{1}.geometry.geometry_type = 2; % 1 outline, 2 rectangle, 4 arc of circle
ids_struct_out_description{ind_coil_ids}.element{1}.geometry.geometry_type = 'rectangle';
ids_struct_out{ind_coil_ids}.resistance = res_c(tmpind);
ids_struct_out_description{ind_coil_ids}.resistance = ['from static(''res_c'')'];
end end
% Find index on static tree
tmpind = find(strcmp(ids_struct_out{ind_coil_ids}.name, namepfc));
ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.r = r_c(tmpind);
ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_r = 'from static(''r_c'')';
ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.z = z_c(tmpind);
ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_z = 'from static(''z_c'')';
ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.width = w_c(tmpind);
ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_width = 'from static(''w_c'')';
ids_struct_out{ind_coil_ids}.element{1}.geometry.rectangle.height = h_c(tmpind);
ids_struct_out_description{ind_coil_ids}.element{1}.geometry.rectangle_height = 'from static(''h_c'')';
ids_struct_out{ind_coil_ids}.element{1}.turns_with_sign = nt_c(tmpind);
ids_struct_out_description{ind_coil_ids}.element{1}.turns_with_sign = 'from static(''nt_c'')';
ids_struct_out{ind_coil_ids}.element{1}.geometry.geometry_type = 2; % 1 outline, 2 rectangle, 4 arc of circle
ids_struct_out_description{ind_coil_ids}.element{1}.geometry.geometry_type = 'rectangle';
ids_struct_out{ind_coil_ids}.resistance = res_c(tmpind);
ids_struct_out_description{ind_coil_ids}.resistance = 'from static(''res_c'')';
end
end end
% fixed_error = 200.; % fixed_error = 200.;
ind_coil_ids = 0; ind_coil_ids = 0;
switch error_bar switch error_bar
case 'delta' case 'delta'
for ii=1:ncircuits2ids for ii=1:ncircuits2ids
ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit
for jj = 1:ncoil2ids for jj = 1:ncoil2ids
fixed_error = pf_def.coil_current_error{ii}(jj); fixed_error = pf_def.coil_current_error{ii}(jj);
ind_coil_ids = ind_coil_ids +1; ind_coil_ids = ind_coil_ids +1;
ids_struct_out{ind_coil_ids}.current.data_error_upper = fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); ids_struct_out{ind_coil_ids}.current.data_error_upper = fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data));
ids_struct_out_description{ind_coil_ids}.current_data_error_upper = fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); ids_struct_out_description{ind_coil_ids}.current_data_error_upper = fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data));
ids_struct_out_description{ind_coil_ids}.current_data_error_lower = ['not provided since symmetric']; ids_struct_out_description{ind_coil_ids}.current_data_error_lower = 'not provided since symmetric';
end
end end
end case 'delta_with_lower'
case 'delta_with_lower' for ii=1:ncircuits2ids
for ii=1:ncircuits2ids ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit
ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit for jj = 1:ncoil2ids
for jj = 1:ncoil2ids fixed_error = pf_def.coil_current_error{ii}(jj);
fixed_error = pf_def.coil_current_error{ii}(jj); ind_coil_ids = ind_coil_ids +1;
ind_coil_ids = ind_coil_ids +1; ids_struct_out{ind_coil_ids}.current.data_error_upper = fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data));
ids_struct_out{ind_coil_ids}.current.data_error_upper = fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); ids_struct_out{ind_coil_ids}.current.data_error_lower = ids_struct_out{ind_coil_ids}.current.data_error_upper;
ids_struct_out{ind_coil_ids}.current.data_error_lower = ids_struct_out{ind_coil_ids}.current.data_error_upper; ids_struct_out_description{ind_coil_ids}.current_data_error_upper = ['from fixed error value in case ' error_bar];
ids_struct_out_description{ind_coil_ids}.current_data_error_upper = ['from fixed error value in case ' error_bar]; ids_struct_out_description{ind_coil_ids}.current_data_error_lower = ['from fixed error value in case ' error_bar];
ids_struct_out_description{ind_coil_ids}.current_data_error_lower = ['from fixed error value in case ' error_bar]; end
end end
end case 'added'
case 'added' for ii=1:ncircuits2ids
for ii=1:ncircuits2ids ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit
ncoil2ids = numel(coil_names2ids{ii}); % number of coils for a given circuit for jj = 1:ncoil2ids
for jj = 1:ncoil2ids fixed_error = pf_def.coil_current_error{ii}(jj);
fixed_error = pf_def.coil_current_error{ii}(jj); ind_coil_ids = ind_coil_ids +1;
ind_coil_ids = ind_coil_ids +1; ids_struct_out{ind_coil_ids}.current.data_error_upper = ids_struct_out{ind_coil_ids}.current.data ...
ids_struct_out{ind_coil_ids}.current.data_error_upper = ids_struct_out{ind_coil_ids}.current.data ...
+ fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); + fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data));
ids_struct_out{ind_coil_ids}.current.data_error_lower = ids_struct_out{ind_coil_ids}.current.data ... ids_struct_out{ind_coil_ids}.current.data_error_lower = ids_struct_out{ind_coil_ids}.current.data ...
- fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data)); - fixed_error.*ones(size(ids_struct_out{ind_coil_ids}.current.data));
ids_struct_out_description{ind_coil_ids}.current_data_error_upper = ['from data + fixed error value in case ' error_bar]; ids_struct_out_description{ind_coil_ids}.current_data_error_upper = ['from data + fixed error value in case ' error_bar];
ids_struct_out_description{ind_coil_ids}.current_data_error_lower = ['from data - fixed error value in case ' error_bar]; ids_struct_out_description{ind_coil_ids}.current_data_error_lower = ['from data - fixed error value in case ' error_bar];
end
end end
end otherwise
otherwise error(['tcv_ids_bpol_loop: error_bar option not known: ' error_bar])
error(['tcv_ids_bpol_loop: error_bar option not known: ' error_bar])
end end
function [ combined_structure] = tcv_ids_pf_active_definition() function [ combined_structure] = tcv_ids_pf_active_definition(doplot)
% All circuits are connected in series and has only 1 power supply, so they % All circuits are connected in series and has only 1 power supply, so they
% share the same current. % share the same current.
if nargin < 1, doplot = 0;end
% NOTE: The sign for T_00* comes from the connection matrix in the static
% tree "T_C_A".
% TODO: We could probably rebuild the connection matrix from the static
% tree node "T_C_A".
% {Coil name}, [connection side identifier] % {Coil name}, [connection side identifier]
error_fixed = 200.; error_fixed = 200.; % This is the error assigned by LIUQE to each circuit/PS
% Since all coils are serially connected to their PS,
% this is also the error for individual coil currents.
coil_names_and_current_sign = {... coil_names_and_current_sign = {...
{'A_001'}, [1], error_fixed*0.007; ... % Circuit 1 {'A_001'}, 1, error_fixed; ... % Circuit 1
{'B_001', 'B_002', 'C_001', 'C_002', 'D_001', 'D_002'}, [1, 1, 1, 1, 1, 1], ... {'B_001', 'B_002', 'C_001', 'C_002', 'D_001', 'D_002'}, [1, 1, 1, 1, 1, 1], ...
error_fixed*[0.03448275862, 0.03448275862, 0.08333333333333, 0.08333333333333, 0.125, 0.125]; ... % Circuit 2 error_fixed*[1, 1, 1, 1, 1, 1]; ... % Circuit 2
{'E_001'}, [1], error_fixed*0.02941176470588; ... % Circuit 3 {'E_001'}, 1, error_fixed; ... % Circuit 3
{'E_002'}, [1], error_fixed*0.02941176470588; ... % Circuit 4 {'E_002'}, 1, error_fixed; ... % Circuit 4
{'E_003'}, [1], error_fixed*0.02941176470588; ... % Circuit 5 {'E_003'}, 1, error_fixed; ... % Circuit 5
{'E_004'}, [1], error_fixed*0.02941176470588; ... % Circuit 6 {'E_004'}, 1, error_fixed; ... % Circuit 6
{'E_005'}, [1], error_fixed*0.02941176470588; ... % Circuit 7 {'E_005'}, 1, error_fixed; ... % Circuit 7
{'E_006'}, [1], error_fixed*0.02941176470588; ... % Circuit 8 {'E_006'}, 1, error_fixed; ... % Circuit 8
{'E_007'}, [1], error_fixed*0.02941176470588; ... % Circuit 9 {'E_007'}, 1, error_fixed; ... % Circuit 9
{'E_008'}, [1], error_fixed*0.02941176470588; ... % Circuit 10 {'E_008'}, 1, error_fixed; ... % Circuit 10
{'F_001'}, [1], error_fixed*0.02777777777778; ... % Circuit 11 {'F_001'}, 1, error_fixed; ... % Circuit 11
{'F_002'}, [1], error_fixed*0.02777777777778; ... % Circuit 12 {'F_002'}, 1, error_fixed; ... % Circuit 12
{'F_003'}, [1], error_fixed*0.02777777777778; ... % Circuit 13 {'F_003'}, 1, error_fixed; ... % Circuit 13
{'F_004'}, [1], error_fixed*0.02777777777778; ... % Circuit 14 {'F_004'}, 1, error_fixed; ... % Circuit 14
{'F_005'}, [1], error_fixed*0.02777777777778; ... % Circuit 15 {'F_005'}, 1, error_fixed; ... % Circuit 15
{'F_006'}, [1], error_fixed*0.02777777777778; ... % Circuit 16 {'F_006'}, 1, error_fixed; ... % Circuit 16
{'F_007'}, [1], error_fixed*0.02777777777778; ... % Circuit 17 {'F_007'}, 1, error_fixed; ... % Circuit 17
{'F_008'}, [1], error_fixed*0.02777777777778; ... % Circuit 18 {'F_008'}, 1, error_fixed; ... % Circuit 18
{'G_001', 'G_002', 'G_003', 'G_004', 'G_005', 'G_006'}, [1,1,1,-1,-1,-1], error_fixed*[1, 1, 1, 1, 1, 1]; ... % Circuit 19 Lower coils connected in opposite direcetion {'G_001', 'G_002', 'G_003', 'G_004', 'G_005', 'G_006'}, [ 1, 1, 1,-1,-1,-1], error_fixed*[ 1, 1, 1, 1, 1, 1]; ... % Circuit 19 Lower coils connected in opposite direcetion
{'T_001', 'T_002', 'T_003'}, [1,1,-1], error_fixed*[2.61538489704145, 1.619047511111125, 1]; ...% Circuit 20 %T003 in opposite direction {'T_001', 'T_002', 'T_003'}, [-1,-1, 1], error_fixed*[1, 1, 1]; ...% Circuit 20 %T003 in opposite direction
}; };
power_supply_names_and_current_sign = {... power_supply_names_and_current_sign = {...
{'OH1'}, [1];... % Circuit 1 {'OH1'}, 1;... % Circuit 1
{'OH2'}, [1];... % Circuit 2 {'OH2'}, 1;... % Circuit 2
{'E1'}, [1];...% Circuit 3 {'E1'}, 1;... % Circuit 3
{'E2'}, [1];...% Circuit 4 {'E2'}, 1;... % Circuit 4
{'E3'}, [1];... % Circuit 5 {'E3'}, 1;... % Circuit 5
{'E4'}, [1];... % Circuit 6 {'E4'}, 1;... % Circuit 6
{'E5'}, [1];... % Circuit 7 {'E5'}, 1;... % Circuit 7
{'E6'}, [1];... % Circuit 8 {'E6'}, 1;... % Circuit 8
{'E7'}, [1];... % Circuit 9 {'E7'}, 1;... % Circuit 9
{'E8'}, [1];... % Circuit 10 {'E8'}, 1;... % Circuit 10
{'F1'}, [1];... % Circuit 11 {'F1'}, 1;... % Circuit 11
{'F2'}, [1];... % Circuit 12 {'F2'}, 1;... % Circuit 12
{'F3'}, [1];... % Circuit 13 {'F3'}, 1;... % Circuit 13
{'F4'}, [1];... % Circuit 14 {'F4'}, 1;... % Circuit 14
{'F5'}, [1];... % Circuit 15 {'F5'}, 1;... % Circuit 15
{'F6'}, [1];... % Circuit 16 {'F6'}, 1;... % Circuit 16
{'F7'}, [1];... % Circuit 17 {'F7'}, 1;... % Circuit 17
{'F8'}, [1];... % Circuit 18 {'F8'}, 1;... % Circuit 18
{'FPS'}, [1];...% Circuit 19 {'FPS'}, 1;... % Circuit 19
{'T'}, [1];... % Circuit 20 {'T'}, 1;... % Circuit 20
}; };
coil_names = {coil_names_and_current_sign{:,1}}'; coil_names = coil_names_and_current_sign(:,1);
coil_current_sign = {coil_names_and_current_sign{:,2}}; coil_current_sign = coil_names_and_current_sign(:,2);
coil_current_error = {coil_names_and_current_sign{:,3}}; coil_current_error = coil_names_and_current_sign(:,3);
power_supply_names = {power_supply_names_and_current_sign{:,1}}'; power_supply_names = power_supply_names_and_current_sign(:,1);
power_supply_current_sign = {power_supply_names_and_current_sign{:,2}}; power_supply_current_sign = power_supply_names_and_current_sign(:,2);
circuit_names = power_supply_names; circuit_names = power_supply_names;
% mds path to be called with gdat % mds path to be called with gdat
mds_paths = {... mds_paths = {...
'\magnetics::ipol[*,"OH_001"]';... % Circuit 1 '\magnetics::ipol[*,"OH_001"]';... % Circuit 1
'\magnetics::ipol[*,"OH_002"]'; ... % Circuit 2 '\magnetics::ipol[*,"OH_002"]'; ... % Circuit 2
'\magnetics::ipol[*,"E_001"]';... % Circuit 3 '\magnetics::ipol[*,"E_001"]';... % Circuit 3
'\magnetics::ipol[*,"E_002"]';...% Circuit 4 '\magnetics::ipol[*,"E_002"]';...% Circuit 4
'\magnetics::ipol[*,"E_003"]';...% Circuit 5 '\magnetics::ipol[*,"E_003"]';...% Circuit 5
'\magnetics::ipol[*,"E_004"]';...% Circuit 6 '\magnetics::ipol[*,"E_004"]';...% Circuit 6
'\magnetics::ipol[*,"E_005"]';...% Circuit 7 '\magnetics::ipol[*,"E_005"]';...% Circuit 7
'\magnetics::ipol[*,"E_006"]';...% Circuit 8 '\magnetics::ipol[*,"E_006"]';...% Circuit 8
'\magnetics::ipol[*,"E_007"]';...% Circuit 9 '\magnetics::ipol[*,"E_007"]';...% Circuit 9
'\magnetics::ipol[*,"E_008"]'; ...% Circuit 10 '\magnetics::ipol[*,"E_008"]'; ...% Circuit 10
'\magnetics::ipol[*,"F_001"]';...% Circuit 11 '\magnetics::ipol[*,"F_001"]';...% Circuit 11
'\magnetics::ipol[*,"F_002"]';...% Circuit 12 '\magnetics::ipol[*,"F_002"]';...% Circuit 12
'\magnetics::ipol[*,"F_003"]';...% Circuit 13 '\magnetics::ipol[*,"F_003"]';...% Circuit 13
'\magnetics::ipol[*,"F_004"]';...% Circuit 14 '\magnetics::ipol[*,"F_004"]';...% Circuit 14
'\magnetics::ipol[*,"F_005"]';...% Circuit 15 '\magnetics::ipol[*,"F_005"]';...% Circuit 15
'\magnetics::ipol[*,"F_006"]';...% Circuit 16 '\magnetics::ipol[*,"F_006"]';...% Circuit 16
'\magnetics::ipol[*,"F_007"]';...% Circuit 17 '\magnetics::ipol[*,"F_007"]';...% Circuit 17
'\magnetics::ipol[*,"F_008"]';... % Circuit 18 '\magnetics::ipol[*,"F_008"]';... % Circuit 18
'is_in("G_001",dim_of(\magnetics::ipol,1)) ? \magnetics::ipol[*,"G_001"] : make_signal(zero(shape(data(\magnetics::ipol))[0],1.0),*,dim_of(\magnetics::ipol,0))';... % G coils % Circuit 19 'is_in("G_001",dim_of(\magnetics::ipol,1)) ? \magnetics::ipol[*,"G_001"] : make_signal(zero(shape(data(\magnetics::ipol))[0],1.0),*,dim_of(\magnetics::ipol,0))';... % G coils % Circuit 19
'\magnetics::iphi';... % Connection between tf coils % Circuit 20 '\magnetics::iphi';... % Connection between tf coils % Circuit 20
}; };
% Combined structure % Combined structure
...@@ -93,17 +102,18 @@ combined_structure.coil_current_signs = coil_current_sign; ...@@ -93,17 +102,18 @@ combined_structure.coil_current_signs = coil_current_sign;
combined_structure.coil_current_error = coil_current_error; combined_structure.coil_current_error = coil_current_error;
combined_structure.power_supply_current_signs = power_supply_current_sign; combined_structure.power_supply_current_signs = power_supply_current_sign;
combined_structure.circuit_names = circuit_names; combined_structure.circuit_names = circuit_names;
combined_structure = get_circuiting(combined_structure); %Add circuiting information combined_structure = get_circuiting(combined_structure,doplot); %Add circuiting information
%% Create the connection matrix from the previous information %% Create the connection matrix from the previous information
function circuit_struct = get_circuiting(circuit_struct) function circuit_struct = get_circuiting(circuit_struct,doplot)
if nargin<2, doplot=0;end
% Get dimension of the circuits % Get dimension of the circuits
circuit_struct.ntotcircuits = numel(circuit_struct.circuit_names); circuit_struct.ntotcircuits = numel(circuit_struct.circuit_names);
circuit_struct.ntotpowersupplies = numel(circuit_struct.power_supply_names); circuit_struct.ntotpowersupplies = numel(circuit_struct.power_supply_names);
circuit_struct.ntotcoils = numel([circuit_struct.coil_names{1:end}]); circuit_struct.ntotcoils = numel([circuit_struct.coil_names{1:end}]);
circuit_struct.ncoilpercircuit = zeros(1,circuit_struct.ntotcircuits); circuit_struct.ncoilpercircuit = zeros(1,circuit_struct.ntotcircuits);
for ii=1:circuit_struct.ntotcircuits for ii=1:circuit_struct.ntotcircuits
circuit_struct.ncoilpercircuit(ii) = numel(circuit_struct.coil_names{ii}); circuit_struct.ncoilpercircuit(ii) = numel(circuit_struct.coil_names{ii});
end end
% Each circuit has only 1 power supply-> number of elements per circuit = % Each circuit has only 1 power supply-> number of elements per circuit =
...@@ -114,74 +124,72 @@ circuit_struct.ntotelements = sum(circuit_struct.nnodespercircuit); ...@@ -114,74 +124,72 @@ circuit_struct.ntotelements = sum(circuit_struct.nnodespercircuit);
circuit_struct.connection_matrix = struct([]); circuit_struct.connection_matrix = struct([]);
power_supply_index = 0;
coil_column_index = 2*circuit_struct.ntotpowersupplies ; coil_column_index = 2*circuit_struct.ntotpowersupplies ;
for ii=1:circuit_struct.ntotcircuits for ii=1:circuit_struct.ntotcircuits
circuit_connection_matrix = zeros(circuit_struct.nnodespercircuit(ii), 2*circuit_struct.ntotelements); circuit_connection_matrix = zeros(circuit_struct.nnodespercircuit(ii), 2*circuit_struct.ntotelements);
% Put power supply connection % Put power supply connection
power_supply_index = ii; power_supply_index = ii;
if circuit_struct.power_supply_current_signs{power_supply_index} == 1 if circuit_struct.power_supply_current_signs{power_supply_index} == 1
circuit_connection_matrix(1,2*(power_supply_index-1)+2) = 1; circuit_connection_matrix(1,2*(power_supply_index-1)+2) = 1;
circuit_connection_matrix(circuit_struct.nnodespercircuit(ii),2*(power_supply_index-1)+1) = 1; circuit_connection_matrix(circuit_struct.nnodespercircuit(ii),2*(power_supply_index-1)+1) = 1;
elseif circuit_struct.power_supply_current_signs{power_supply_index} == -1 elseif circuit_struct.power_supply_current_signs{power_supply_index} == -1
circuit_connection_matrix(1,2*(power_supply_index-1)+1) = 1; circuit_connection_matrix(1,2*(power_supply_index-1)+1) = 1;
circuit_connection_matrix(circuit_struct.nnodespercircuit(ii),2*(power_supply_index-1)+2) = 1; circuit_connection_matrix(circuit_struct.nnodespercircuit(ii),2*(power_supply_index-1)+2) = 1;
end end
% Put coil connection % Put coil connection
for jj=1:circuit_struct.ncoilpercircuit(ii) for jj=1:circuit_struct.ncoilpercircuit(ii)
if circuit_struct.coil_current_signs{ii}(jj) == 1 if circuit_struct.coil_current_signs{ii}(jj) == 1
circuit_connection_matrix(jj, coil_column_index + 2*(jj-1) + 1 ) = 1; circuit_connection_matrix(jj, coil_column_index + 2*(jj-1) + 1 ) = 1;
circuit_connection_matrix(jj + 1, coil_column_index + 2*(jj-1) + 2 ) = 1; circuit_connection_matrix(jj + 1, coil_column_index + 2*(jj-1) + 2 ) = 1;
elseif circuit_struct.coil_current_signs{ii}(jj) == -1 elseif circuit_struct.coil_current_signs{ii}(jj) == -1
circuit_connection_matrix(jj, coil_column_index + 2*(jj-1) + 2 ) = 1; circuit_connection_matrix(jj, coil_column_index + 2*(jj-1) + 2 ) = 1;
circuit_connection_matrix(jj + 1, coil_column_index + 2*(jj-1) + 1 ) = 1; circuit_connection_matrix(jj + 1, coil_column_index + 2*(jj-1) + 1 ) = 1;
end
end end
end
coil_column_index = coil_column_index + 2*circuit_struct.ncoilpercircuit(ii);
circuit_struct.connection_matrix{ii} = circuit_connection_matrix; coil_column_index = coil_column_index + 2*circuit_struct.ncoilpercircuit(ii);
circuit_struct.connection_matrix{ii} = circuit_connection_matrix;
% Plot all the connaction matrices as a check
doplot = 0; % Plot all the connaction matrices as a check
if doplot if doplot
plot_connection_matrix(circuit_connection_matrix, circuit_struct.power_supply_names, circuit_struct.coil_names); plot_connection_matrix(circuit_connection_matrix, circuit_struct.power_supply_names, circuit_struct.coil_names);
end end
end end
%% Plot connection matrix %% Plot connection matrix
function plot_connection_matrix(mat, psnames, cnames, circuitname, circuit ) function plot_connection_matrix(mat, psnames, cnames) %, circuitname, circuit
% Plot the value of a matrix in separated block % Plot the value of a matrix in separated block
figure figure
b = zeros([size(mat)]+1); b = zeros(size(mat)+1);
b(1:end-1, 1:end-1) = mat; b(1:end-1, 1:end-1) = mat;
pcolor(b) pcolor(b)
yti = [1:size(b,1)]+0.5; yti = (1:size(b,1))+0.5;
xti = [1:size(b,2)]+0.5; xti = (1:size(b,2))+0.5;
ylab = cellstr(num2str([1:size(b,1)-1]')); ylab = cellstr(num2str((1:size(b,1)-1).'));
index = 0; index = 0;
xlab = {}; xlab = cell(1,numel(psnames));
% Get the labels % Get the labels
for ii=1:numel(psnames) for ii=1:numel(psnames)
index = index +1; index = index +1;
xlab{index} = [psnames{ii}{1} 'in']; xlab{index} = [psnames{ii}{1} 'in'];
index = index +1; index = index +1;
xlab{index} = [psnames{ii}{1} 'out']; xlab{index} = [psnames{ii}{1} 'out'];
end end
for ii=1:numel(cnames) for ii=1:numel(cnames)
for jj=1:numel(cnames{ii}) for jj=1:numel(cnames{ii})
index = index +1; index = index +1;
xlab{index} = [cnames{ii}{jj} 'in']; xlab{index} = [cnames{ii}{jj} 'in'];
index = index +1; index = index +1;
xlab{index} = [cnames{ii}{jj} 'out']; xlab{index} = [cnames{ii}{jj} 'out'];
end end
end end
shg shg
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment